2009-07-30 2 views
4

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

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

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

Мое мышление состояло в том, что вполне возможно, что в строке может встречаться конечный символ NULL. Твои мысли?

ответ

13

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

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

Проверить Wikipedia for UTF-8

+2

На самом деле UTF-8 был специально спроектирован так, чтобы это было правдой, потому что полезно иметь кодировку, в которой диапазон ASCII хранится по одному байту каждый и который разумно работает при передаче в 'strcpy() 'и его друзей. – RBerteig

1

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

+0

Морис, есть ли ссылки в поддержку этого заявления? – Aamir

+0

См. Сообщение CsTamas –

+2

См. Http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 –