У меня есть поле HTML, с которым пользователи могут ввести текст. Я хотел бы удостовериться, что весь текст, введенный в поле, или кодируется в UTF-8 или преобразовывается в UTF-8, когда пользователь заканчивает вводить. Кроме того, я не вполне понимаю, как различное кодирование UTF выбрано, будучи вводимым в текстовое поле.
Обычно мне любопытно на предмет следующего:
** Редактирование **
Удаленный некоторые вопросы, ненужные к моим целям.
Это учебное руководство помогло мне понять коды символов JavaScript лучше, но является багги и на самом деле не переводит коды символов в utf-8 во всех случаях. http://www.webtoolkit.info/javascript-base64.html
- Как браузер определяет, какие кодировки использовать, когда пользователь набирает текст в текстовом поле?
Он использует кодировку, которую страница была декодирована по умолчанию. Согласно спецификации, вы должны иметь возможность переопределить это с помощью атрибута accept-charset
элемента , но IE - багги, поэтому не стоит полагаться на это (я видел несколько разных исходников, описывающих несколько различных ошибок, и у меня не все соответствующие версии IE перед глазами для тестирования, так что я оставлю это).
- Как JavaScript может определить кодировку значения строки в html текстовом поле?
Все строки в JavaScript кодируются в UTF-16. Браузер отобразит все в кодировку UTF-16 для JavaScript, и из UTF-16 в любую кодировку страницы.
UTF-16 - это кодировка, которая выросла из UCS-2. Первоначально считалось, что 65,536 точек кода будет достаточно для всего Юникода, и поэтому 16-битной кодировки будет достаточно. Оказалось, что это не так, и поэтому набор символов был расширен до 1 114 112 кодовых точек. Для сохранения обратной совместимости несколько неиспользованных диапазонов 16-битного набора символов были отложены для суррогатных пар, в которых для кодирования одного символа использовались две 16-битные единицы кода. Для получения более подробной информации читайте на UTF-16 и UCS-2 в Википедии .
Вывод заключается в том, что когда у вас есть строка str
в JavaScript, str.length
не дает количество символов, а дает количество единиц кода, с помощью которых два единицы кода могут быть использованы для кодирования одного символа, если этот символ не находится в базовой многоязычной плоскости. Например, "abc".length
дает 3, но "
Я хотел бы убедиться, что весь текст, вводимый в поле, либо в кодировке UTF-8
Текст в HTML DOM, включая поля ввода, не имеет собственной байтовой кодировки; он хранится в виде символов Юникода (в частности, на уровне DOM и ECMAScript стандарта, единиц кода UTF-16; в редких случаях, когда вы используете символы вне базовой многоязычной плоскости, можно увидеть разницу, например '
Текст в текстовом поле никак не закодирован; это "текст", абстрактная серия символов. Практически в каждом современном приложении этот текст выражается последовательностью точек кода Юникода, которые являются целыми числами, привязанными к определенным абстрактным символам. Текст не "кодируется" до тех пор, пока не превратится в последовательность байт, как при заполнении формы. В это время кодировка определяется кодировкой HTML-страницы, в которой появляется форма, или атрибутом accept-charset элемента формы.
.