Следует ли мне перейти с UTF-8 на UTF-16, чтобы использовать китайские символы в моем HTML?

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

Спасибо,

Аарон


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


Ответы (2)


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.

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

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

person jjrv    schedule 05.10.2010