2015-04-26 3 views
-1

Я пытаюсь написать специальные символы в файл. Чтобы быть конкретным, что-то вроде символа 'ă', который, по-видимому, имеет код U + 0103.C/C++ Установить кодировку UNICODE .. Как написать 'ă' в файл

Я не понимаю, как установить кодировку UNICODE. И как на самом деле напечатать этот символ. Все, что я пробовал, в том числе wchar_t только печатает '?'.

И если я прочитал из текстового файла, используя wchar_t, будет ли он читать символ char? Поскольку нормальный символ в текстовом файле составляет 1 байт, а wchar_t - 2/4. Нужно ли читать char и конвертировать?

Некоторый пример исходного кода был бы оценен ... Заранее благодарен!

+1

У вас, похоже, есть некоторые концептуальные проблемы, начинайте здесь: http://www.joelonsoftware.com/articles/Unicode.html – thebjorn

+0

Чтобы начать с чего-то легкого: а) перестать думать о «Юникоде» как о единственной кодировке (это isn't), б) не верьте, что wchar_t - простое решение для всего (на самом деле wchar_t никак не привязан к любой кодировке Unicode. Это может быть что угодно.). c) Для всех трех самых обычных кодировок Unicode (UTF8/16/32) wchar_t с 2 байтами недостаточно для хранения символа (независимо от характера, потому что он используется с несколькими значениями) – deviantfan

+0

@ thebjorn -> Спасибо за ссылку. Сделано много вещей намного яснее. Итак, как мне сделать печать программы в определенной кодировке. Или, если у меня есть строка, закодированная каким-то образом, как мне ее перевести? – RatkinHHK

ответ

1

Терминология, которая вам понадобится при поиске, является «кодировкой» для перехода из Unicode -> байтов и «декодированием» при переходе из байтов -> Unicode. В общем, вы должны знать, какая кодировка имеет байты.

Чтобы иметь возможность печатать на консоли, вам необходимо закодировать строку Юникода в кодировке консоли. Для Linux, который является utf-8, в то время как в Windows это может быть что-то непонятное, как cp1252 (его можно изменить).

Я предлагаю смотреть на Boost.Locale (http://www.boost.org/doc/libs/1_58_0/libs/locale/doc/html/index.html) или интенсивной терапии (http://site.icu-project.org/) при работе с Unicode в C++ (другие языки имеют более зрелыми/проще в использовании функции Unicode в случае, если вы не заперт в C++).