Чтение файла Unicode в кодировке UTF-8 через код, не относящийся к юникоду - PullRequest
4 голосов
/ 30 июля 2009

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

Мой код для чтения - это код C ++ без поддержки юникода. То, что я делаю, - это чтение файла построчно в string/char* и помещение этой строки как есть в конечный файл. Я не могу изменить код, поэтому предложения по изменению кода не приветствуются.

Что я хочу знать, так это то, что при чтении построчно я могу встретить завершающий символ NULL ('\ 0') внутри строки, так как это юникод и один символ может занимать несколько байтов.

Я думал, что вполне возможно, что в строке может встретиться завершающий символ NULL. Ваши мысли?

Ответы [ 2 ]

13 голосов
/ 30 июля 2009

UTF-8 использует 1 байт для всех символов ASCII, которые имеют те же значения кода, что и в стандартном кодировании ASCII, и до 4 байтов для других символов. Старшие биты каждого байта зарезервированы как биты управления. Для кодовых точек, использующих более 1 байта, устанавливаются биты управления.

Таким образом, в вашем файле UTF-8 не должно быть 0 символов.

Проверка Википедия для UTF-8

1 голос
/ 30 июля 2009

Очень маловероятно: все байты в escape-последовательности UTF-8 имеют старший бит, установленный в 1.

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