Вставка знака £ в выходную строку в C++

У меня есть следующий код:

cout << "String that includes a £ sign";

Однако компилятор не распознает знак £, и вместо него отображается буква u с ударением. Я могу вставить один, используя следующий метод:

cout << "String that includes a " << char(156) << " sign";

где 156 — это ASCII-код знака £. Есть ли способ включить этот код ASCII в саму строку, не выделяя его таким образом? Например:

cout << "String that includes a <some way of iserting the £ sign> sign";

person Community    schedule 30.09.2010    source источник


Ответы (4)


£ не имеет "кода ASCII" - ASCII составляет 7 бит (0..127). Существуют различные расширенные наборы 8-битных символов, которые включают £, но для этого нет единого стандарта, и символ £ может иметь разные значения в разных средах. Вам, вероятно, следует использовать Unicode, если вам нужны международные символы с максимальной переносимостью.

person Paul R    schedule 30.09.2010
comment
Ага. Однако вы можете попробовать std::wcout << L"String that includes a £ sign";. В зависимости от вашей платформы это может сработать. - person sbi; 30.09.2010
comment
В целях разъяснения. В Visual Studio: Проект -> Свойства -> Свойства конфигурации -> Общие -> Изменить набор символов с «Использовать многобайтовый набор символов» на «Использовать набор символов Unicode». - person AndyG; 30.09.2010

Вы можете использовать управляющую последовательность \x для вставки символа с его шестнадцатеричным кодом. В твоем случае

cout << "String that includes a \x9C sign";

Как говорит Пол, это просто выводит символ с кодом 156, но не дает гарантии, что это на самом деле знак фунта в разных системах.

person Carvellis    schedule 30.09.2010

ASCII определяет только символы до 127. (8-й бит был предназначен для контроля четности, который был необходим для шумной линии передачи 1960-х годов, когда был разработан ASCII). Кроме того, символы различаются в зависимости от кодовой страницы и шрифта. Существует несоответствие между шрифтом, используемым редактором, который вы используете для написания кода C++, и шрифтом, используемым тем, что отображает вывод.

Итак, вам нужно отобразить символ 156, чтобы отобразить £ на вашем устройстве вывода. Вы можете явно ввести символ 156 на ПК с Windows, удерживая клавишу Alt и нажимая «0159» на цифровой клавиатуре. В качестве альтернативы вы можете использовать код символа в строке в шестнадцатеричном формате:

 cout << "String that includes a \x9C sign"; 
person James Curran    schedule 30.09.2010

Я пытался ответить на тот же вопрос в C.

Один из ответов в разделе Отображение широких символов с помощью printf дает ключ к возможно более надежному метод. При использовании редактора Code::Blocks ни \x9C, ни \xA5 не работают. Это может быть связано с тем, что для вывода консоли по умолчанию установлен локальный POSIX, это только ASCII, поэтому никакие символы выше \x7f не работают. Чтобы установить локаль на UTF-8, мы можем использовать setlocale(LC_ALL,"").

#include <stdio.h>
#include <locale.h>

int main() {
    setlocale(LC_ALL,"");
    printf("%lc",163);
} 
 

В С++ мы можем использовать

setlocale(LC_ALL,"");
cout << char(163) << 123.45 << endl;

С установленной локалью UTF-8 нам нужно преобразовать символ юникода \x9c в двухбайтовую кодировку UFT-8. Что такое \xc2a3. Так

printf("\xc2a3%.2f",123.456);
person Salix alba    schedule 11.11.2020