Чтение японского текста из текстового файла UTF-8

Я создал один текстовый файл с кодировкой UTF-8, и в этом файле я написал несколько японских символов, теперь я хочу прочитать этот текстовый файл и отобразить его на консоли, а также сохранить данные в другом файле.


Microsoft SDK предоставляет две функции для преобразования между кодировками символов: MultiByteToWideChar [^] и WideCharToMultiByte [^].

Чтобы упростить код вашего приложения, вы должны использовать Unicode (который по умолчанию с последними версиями VisualStudio).

Используйте MultiByteToWideChar для преобразования строки UTF-8 в широкие символы. Чтобы распечатать это на консоли, может потребоваться преобразовать строку в кодировку, используемую консолью (вызовите GetConsoleOutputCP [^]). Если кодовая страница, используемая консолью, не может печатать ваши японские символы, вы можете изменить кодовую страницу с помощью SetConsoleOutputCP [^]. Во всех случаях вы должны убедиться, что шрифт, используемый консолью, содержит используемые символы.

При выводе в файл вы можете использовать любую кодировку. Это в основном зависит от приложений, которые должны открывать файл.

[ИЗМЕНИТЬ в соответствии с комментарием, опубликованным выше]
Вы можете ознакомиться с советом Обработка простых текстовых файлов в C /C ++ [^] для примера.
Общий процесс следующий:

  • Получить размер файла UTF-8
  • Выделить буфер для текста UTF-8
  • Открыть файл, прочитать содержимое в буфер, закрыть файл
  • Вызов MultiByteToWideChar с CP_UTF8 , lpMultiByteStr = входной буфер, cbMultiByte = размер файла, lpWideCharStr = NULL, cchWideChar == 0, чтобы получить длину буфера.
  • Выделить широкий буфер символов, используя возвращенное значение с помощью вышеуказанного вызова
  • Вызов MultiByteToWideChar снова, передав теперь выходной буфер и его размер.
  • Сделайте что-нибудь с широкой строкой, например печать на консоль
  • Удалите буферы, если они больше не нужны

Если вы хотите использовать содержимое файла UTF-8 также для других целей, вы должны выделить на один байт больше и установить его равным нулю. В этом нет необходимости, если используется только MultiByteToWideChar и передается правильный размер.

Оцените статью
techsly.ru
Добавить комментарий