Вопрос по utf-8, utf-16, html – Должен ли я перейти с UTF-8 на UTF-16 для размещения китайских символов в моем HTML?

7

Я использую ASP.NET MVC, MS SQL и IIS. У меня есть несколько пользователей, которые использовали китайские иероглифы в информации своего профиля. Тем не менее, когда я отображаю эту информацию, отображается какæŽå¼·è¯ но они верны в моей базе данных. В настоящее время мой UTF для моих HTML-страниц установлен в UTF-8. Должен ли я изменить его на UTF-16? Я понимаю, что естьнесколько проблем что может исходить из этого, но каков мой выбор?

Спасибо,

Аарон

это только для PHP, верно? Aaron Salazar
ты используешьhtmlentities() или жеhtmlspecialchars() при выводе? Andrew67
Вы пытались указать свой набор символов в мета-тегах?w3.org/International/questions/qa-html-encoding-declarations Jonas Stawski

Ваш Ответ

2   ответа
19

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

Так что переход на UTF-16 вряд ли поможет вам. Существует вероятность того, что все становится еще хуже, как обсуждалось в SO-вопросе, который вы указали выше. Есть проблема где-то еще в вашей настройке, которая неправильно учитывает символы не ASCII или не Latin-1. Убедитесь, что каждая часть вашей настройки работает в UTF-8.

@yuji На самом деле UTF-8 может использовать до 4 байтов. Первоначально это было 6, но после осознания того, что это будет излишним (сегодня мы используем только около 110 000, тогда как 6 байтов позволят 2 миллиарда!), Люди согласились на 4 байтаtools.ietf.org/html/rfc3629 joakim
UTF-16 может иметь 2 кодовые единицы по 16 бит каждая, для представления символа нужно всего 32 бита, см. Некоторые примеры вen.wikipedia.org/wiki/UTF-16 Anton Roslov
4

Любое кодирование UTF должно работать одинаково в их способности представлять символы Unicode, поэтому переключение на UTF-16 не поможет. Где-то есть проблема с кодировкой, и с UTF-16 у вас будет только другое неправильное представление HTML. Конечно, если у вас есть библиотека, которая просто кодирует не-ASCII-символы как сущности и поддерживает широкие символы, ваша проблема может быть решена с помощью переключателя. Однако есть символы, которым нужно даже 2 широких символа, и они все равно будут отображаться неправильно, хотя пользователи могут заметить это редко. Лучшим вариантом будет иметь то, что создает HTML, чтобы правильно интерпретировать ваш UTF-8.

Похожие вопросы