Блог пользователя 0O0o000O0Oo0o0Oo

Автор 0O0o000O0Oo0o0Oo, 12 лет назад, По-русски

У меня возникла такая проблема, может кто знает как решить? Нужно читать, обрабатывать и выводить (в консоль и в файл) текст, в котором содержатся специальные символы, которых нет в кодировке ANSI, но есть в Unicode (пример таких символов: ᴖ ᴗ). С русскими буквами проблем нет, все выводится как надо, а вот со специальными символами — проблема. Не выводятся ни в файл, ни в консоль. Может кто-то сталкивался с такой проблемой. Заранее спасибо!

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

По умолчанию в консоли (в винде) и файлах используется какая-нибудь однобайтная кодировка. Например, cp1251. Она не содержит нужных вам символов, только русские. Посмотрите, в какой кодировке сохранён код программы (правильно понимаю, что в коде всё прекрасно видно?) и откройте файл с выводом в такой же. Как заставить виндовую консоль работать в юникоде, я не знаю, а линуксовая часто работает в нём по умолчанию.

»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Если речь о windows и visual c++ компиляторе, то можно глянуть на древнюю-древнюю статью и комментарии к ней. А вообще проблема слишком многогранна, нужно хотя бы знать откуда и в какой кодировке берется текст, а также операционные системы и компиляторы с которыми должно работать решение.

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Система — Windows. Компилятор — visual c++. Данные берутся из текстового файла (*.txt). Файл сохранен в кодировке Unicode.

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

    Я бы посоветовал немножко сначала разобраться в понятиях, чтобы не было терминологической путаницы в будущем. Unicode тоже, конечно, называют иногда кодировкой. Но Unicode — это по сути стандартизированное отображение логических символов на целые числа. То есть такая большая таблица, в которой каждому символу ставится в соответствие число. А есть еще конкретные реализации character encodings, которые кодируют эти числа из таблицы в битовое представление, фактически в другие числа. Цель этого кодирования обычно — уменьшить необходимый объем памяти при задании строк в среднем. Распространенные кодировки для Unicode — это UTF-8, UTF-16, etc

    Для работы с юникодом на уровне С++ есть wchar_t, в stl есть соответственно wstring, wcout, etc (это если не трогать пока С++11). На уровне visual studio и Microsoft-specific нужно разобраться с макросами UNICODE, _UNICODE, _T, TCHAR, LPCTSTR и прочими.

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Для работы с Unicode лучше использовать отдельную библиотеку, предназначенную для этого. Например, в glibmm и Qt есть соответствующие функции.