Могут ли кодированные в UTF8 данные неправильно считываться, так как Latin-1 создает артефакты ASCII? - PullRequest
1 голос
/ 06 ноября 2010

Однобайтовые символы UTF-8 отлично отображаются на символы Latin-1 (ISO 8859-1) (те, что ниже кода символа из 128);в основном символы ASCII по умолчанию.Если у меня есть строка в кодировке UTF-8 и я передаю ее функции, которая ожидает строку Latin-1, есть ли вероятность того, что функция Latin-1 неверно истолковывает части многобайтовых символов UTF-8 как символы ASCII?

Я предполагаю, что что-то подобное может произойти:

(imagniray) Многобайтовый символ UTF-8: 0xA330
(mis-) интерпретируется функцией Latin-1 как две латиницы.1 символ: 0xA3 0x30

Первый из этих символов не лежит в наборе ASCII, а второй - это код ASCII для символа 0.Возможно ли, что многобайтовый символ UTF-8 создает артефакт, который выглядит как однобайтовый символ UTF-8 / ASCII, как в примере выше?

Из моего понимания UTF-8 только однобайтовые символысодержат любые байты с не значащим значащим битом, поэтому в основном многобайтовые символы никогда не содержат байта, который может быть неверно истолкован функцией Latin-1 как действительный символ ASCII (поскольку все эти символы имеют не значащий бит значащим).Но я хочу убедиться, что это правда, и я не облажаюсь, потому что это может иметь последствия для безопасности при работе с очисткой данных - что я, очевидно, сейчас и делаю.

1 Ответ

3 голосов
/ 06 ноября 2010

Вы правы в том понимании, что только однобайтовые символы содержат любые байты с самым старшим неустановленным битом.Есть хорошая таблица, показывающая это по адресу: http://en.wikipedia.org/wiki/UTF-8#Description

...