Проблема кодировки символов - PullRequest
3 голосов
/ 24 октября 2010

Привет,

Я занимаюсь разработкой проекта на C ++, в котором я хочу использовать такие символы, как á é õ и ┌ ─ ┐ │, чтобы нарисовать пару красивых рамок. Мое сомнение заключается в том, что я должен изменить в настройках своего кода / проекта, поскольку без каких-либо изменений консоль просто печатает псевдослучайные символы.

Я знаю, что вышеуказанные символы определены в кодовой странице 437 набора символов, также известной как Extended ASCII, но что я должен знать?

После некоторых исследований я включил инструкцию setlocale(LC_CTYPE, "");, и теперь я могу печатать символы с акцентом (à é õ), но не могу печатать границы.

Кроме того, я должен использовать char и string или wchar и wstring, чтобы использовать эти символы?

Спасибо

Ответы [ 3 ]

2 голосов
/ 24 октября 2010

Я думаю, что лучший способ сделать это - использовать wchar и wstring для символов - они предназначены для строковых операций, не зависящих от локали, и определены как UTF-16 в Windows и как UTF-32 в Linux.

Обратите внимание, что вам нужно использовать правильные функции, например wprintf вместо printf ... Если вы используете iostream, я думаю, что это должно работать "из коробки" с wstrings.

РЕДАКТИРОВАТЬ: Обратите внимание, что для wchar_t необязательно быть Unicode (на практике это часто так). Если wchar_t (и, следовательно, wstring) является юникодом, то стандарт C99 (и, следовательно, скорее всего, стандарт C ++) гласит, что __STDC_ISO_10646__ должно быть определено.

Другими словами, если определено __STDC_ISO_10646__, то wchar_t - это Unicode - как для точного типа (UTF-16 или UTF-32), вы можете использовать sizeof (wchar_t).

0 голосов
/ 24 октября 2010

Чтобы увидеть, какие символы Юникода использовать, найдите http://unicode.org/charts/ и выполните поиск по запросу «Рисование коробки». Этот набор включает в себя символы из CP 437, но также и многие другие. Следующий вопрос - может ли ваше устройство отображать некоторые или все из них.

0 голосов
/ 24 октября 2010

Попробуйте использовать wchar_t

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...