Какую кодировку Unicode (UTF-8, UTF-16, другое) использует Windows для своих типов данных Unicode?

Существуют разные кодировки одного и того же Unicode (стандартизировано) Таблица. Например для кодировки UTF-8 A соответствует 0x0041 но для кодировки UTF-16 то же самое A является представлен как 0xfeff0041,

Из этого блестящая статья Я узнал, что когда я программирую на C ++ для платформы Windows и имею дело с Unicode, я должен знать, что он представлен в 2 байта. Но это ничего не говорит о кодировке. (Даже там говорится, что процессоры x86 имеют младший порядок, поэтому я знаю, как эти два байта хранятся в памяти.) Но я также должен знать кодировку Unicode, чтобы у меня была полная информация о том, как символы хранятся в памяти. Есть ли фиксированная кодировка Unicode для программистов на C ++ / Windows?

7

Решение

Значения, хранящиеся в памяти для Windows, всегда имеют порядковый номер UTF-16. Но это не то, о чем вы говорите — вы смотрите на содержимое файла. Сама Windows не определяет кодировку файлов, она оставляет это отдельным приложениям.

0xfe 0xff, который вы видите в начале файла, является Порядок следования байтов или спецификация. Это не только указывает на то, что файл, скорее всего, является Unicode, но и указывает, какой вариант кодировки Unicode.

0xfe 0xff      UTF-16 big-endian
0xff 0xfe      UTF-16 little-endian
0xef 0xbb 0xbf UTF-8

Предполагается, что файл, не имеющий спецификации, должен быть 8-битным символом, если вы не знаете, как он был написан. Это все еще не говорит вам, является ли это UTF-8 или какой-то другой кодировкой Windows, вам просто нужно угадать.

Вы можете использовать Блокнот в качестве примера того, как это делается. Если у файла есть спецификация, Блокнот прочитает его и обработает содержимое соответствующим образом. В противном случае вы должны указать кодировку самостоятельно в раскрывающемся списке «Кодировка».

Изменить: причина, по которой документация Windows не является более точной в отношении кодировки, заключается в том, что Windows была очень ранним последователем Юникода, и в то время только один кодирование 16 бит на кодовую точку. Когда 65536 кодовых точек были определены как неадекватные, были изобретены суррогатные пары как способ расширения диапазона, и родился UTF-16. Microsoft уже использовала Unicode для обозначения их кодировки и никогда не менялась.

14

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector