Как распечатать terminal на терминал, используя g ++? - PullRequest
0 голосов
/ 18 января 2019

Я хочу напечатать в терминале. Я пытался

cout << '\u2248' << endl;
cout << '\U00002248' << endl;
cout << '≠' << endl;

, что дает

14846344
14846344
14846368

Я пытался заменить одинарные кавычки на двойные

Ôëê
Ôëê
Ôëá

Как это можно сделать? Мне любопытно, чем объясняется вывод, который я получаю? Я использую Netbeans 9, но также тестировал напрямую из командной строки с g ++. Я думаю, что это должно быть возможно, потому что echo ≠ производит правильный вывод в командной строке Windows.

1 Ответ

0 голосов
/ 18 января 2019

Итак, в C ++, как и в простом C, по умолчанию мы можем работать только с символами ASCII. Char переменные содержат всего 8 бит (1 байт) для хранения значений, поэтому максимум - 2 ^ 8 = 256 различных символов могут быть закодированы одной переменной char. Одиночные кавычки (например, 'a') хранят переменные типа char, поэтому внутри них можно поместить только ASCII-символ. Ваш персонаж не является частью таблицы ASCII, и нам нужно изменить кодировку.

Для того, чтобы просто напечатать (не хранить / обработать) вашего персонажа, вам следует использовать другую кодировку, например UTF-8. Вы можете сделать это программно:

std::setlocale(LC_ALL, /*some system-specific locale name, probably */ "en_US.UTF-8");
std::cout << "\u2260" << std::endl;

Или с помощью параметров командной строки для g ++ (например, -finput-charset = UTF-16 ). Как видите, я использую двойные кавычки для вывода на консоль не-ASCII символов.

...