Почему 32-байтовый текстовый файл ASCII становится 66-байтовым при преобразовании в Unicode? - PullRequest
0 голосов
/ 19 сентября 2018

32-символьный текстовый файл, созданный в блокноте Windows и сохраненный в ASCII, будет иметь размер 32 байта.Когда тот же самый 32-символьный текст сохраняется в Юникоде, размер увеличивается до 66 байт.

Почему размер не равен 64 байтам, поскольку 16-битный символ Юникода в два раза больше символа ASCII?

1 Ответ

0 голосов
/ 19 сентября 2018

Unicode - это просто кодировка и не имеет 16-битных символов, потому что это не набор сопоставлений символов, которые нигде не хранятся.Для представления Unicode существуют UTF-8, UTF-16 и UTF-32 и многие другие кодировки с различными размерами кодовых единиц.Unicode не может быть представлен только 16 битами, потому что это 21-битная кодировка.

Не зная содержимого вашего исходного файла, если он содержит чистый ASCII (т.е. только кодовые точки ниже 128), то это из-за знак порядка байтов (BOM) U + FEFF .Когда вы выбрали «Unicode» при сохранении файла в «Блокноте», это на самом деле UTF-16LE, и он будет вставлять 2-байтовую спецификацию (0xFF 0xFE) в начале, чтобы указать кодировку файла, увеличивая его размер до 66. Имена вБлокнот просто сбивает с толку.Фактически то же самое происходит, если вы вводите любой текст ниже U + FFFF и сохраняете как UTF-16.Если вы сохраните файл в чистом ASCII как UTF-8, тогда длина будет теперь 35 байтов из-за 3-байтовой спецификации

Обязательное чтение: Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знатьО Юникоде и наборах символов (без оправданий!)

...