О, мальчик.Добро пожаловать в мир забавных, забавных кодировок символов.
Первое, что вам нужно знать, это то, что ваша консоль не является Unicode в Windows.Единственный способ увидеть японские символы в консольном приложении - это, если вы установите для своего языка не-Unicode (ANSI) японский.Это также сделает обратные слэши похожими на символы иены и пути разрыва, содержащие символы с европейским акцентированием, для программ, использующих API-интерфейс ANSI Windows (который был предполагается устаревшим, когда появилась Windows XP, но люди все еще используют по сей день...)
Итак, первое, что вы захотите сделать - это создать программу с графическим интерфейсом.Но я оставлю это как упражнение заинтересованному читателю.
Во-вторых, существует много способов представления текста.Сначала вам нужно выяснить используемую кодировку.Это UTF-8?UTF-16 (и если да, маленький или большой порядковый номер?) Shift-JIS?EUC-JP?Вы можете использовать wstream
только для непосредственного чтения, если файл имеет младший порядок UTF-16.И даже тогда вам нужно futz со своим внутренним буфером .Что-нибудь кроме UTF-16, и вы получите нечитаемый мусор.И это только на Windows!Другие ОС могут иметь другое представление wstream
.Лучше вообще не использовать wstream
s.
Итак, давайте предположим, что это , а не UTF-16 (для полной общности).В этом случае вы должны прочитать его как поток символов - , а не , используя wstream
.Затем вы должны преобразовать эту строку символов в UTF-16 (при условии, что вы используете Windows! Другие ОС, как правило, используют UTF-8 char*
s).На окнах это можно сделать с помощью MultiByteToWideChar
.Убедитесь, что вы ввели правильное значение кодовой страницы, а CP_ACP
или CP_OEMCP
почти всегда являются неправильным ответом.
Теперь вам может быть интересно, как определить, какая кодовая страница (т. Е. Кодировка символов)верно.Короткий ответ: Вы не .Нет никакого prima facie способа посмотреть на текстовую строку и сказать, какая это кодировка.Конечно, могут быть подсказки - например, если вы видите метку порядка следования байтов , скорее всего, это какой-то вариант Юникода, который делает эту метку.Но в целом пользователь должен сказать вам, или попытаться угадать, полагаясь на то, что пользователь исправит вас, если вы ошибаетесь, или вы должны выбрать фиксированный набор символов и не пытаться поддерживать какие-либодр.