Как я удостоверяюсь, что текст, закодированный в форме, является utf8

У меня есть поле HTML, с которым пользователи могут ввести текст. Я хотел бы удостовериться, что весь текст, введенный в поле, или кодируется в UTF-8 или преобразовывается в UTF-8, когда пользователь заканчивает вводить. Кроме того, я не вполне понимаю, как различное кодирование UTF выбрано, будучи вводимым в текстовое поле.

Обычно мне любопытно на предмет следующего:

  • Как браузер определяет, какую кодировку использовать, когда пользователь вводит в текстовое поле?
  • Как JavaScript может определить кодирование строкового значения в поле текста HTML?
  • Я могу вынудить браузер только использовать кодировку UTF-8?
  • Как я могу закодировать произвольную кодировку к UTF-8, я предполагаю, что существует библиотека JavaScript для этого?

** Редактирование **

Удаленный некоторые вопросы, ненужные к моим целям.

Это учебное руководство помогло мне понять коды символов JavaScript лучше, но является багги и на самом деле не переводит коды символов в utf-8 во всех случаях. http://www.webtoolkit.info/javascript-base64.html

14
задан Ethan Heilman 7 January 2010 в 20:10
поделиться

3 ответа

  • Как браузер определяет, какие кодировки использовать, когда пользователь набирает текст в текстовом поле?

Он использует кодировку, которую страница была декодирована по умолчанию. Согласно спецификации, вы должны иметь возможность переопределить это с помощью атрибута 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, но "

16
ответ дан 1 December 2019 в 12:52
поделиться

Я хотел бы убедиться, что весь текст, вводимый в поле, либо в кодировке UTF-8

Текст в HTML DOM, включая поля ввода, не имеет собственной байтовой кодировки; он хранится в виде символов Юникода (в частности, на уровне DOM и ECMAScript стандарта, единиц кода UTF-16; в редких случаях, когда вы используете символы вне базовой многоязычной плоскости, можно увидеть разницу, например '

4
ответ дан 1 December 2019 в 12:52
поделиться

Текст в текстовом поле никак не закодирован; это "текст", абстрактная серия символов. Практически в каждом современном приложении этот текст выражается последовательностью точек кода Юникода, которые являются целыми числами, привязанными к определенным абстрактным символам. Текст не "кодируется" до тех пор, пока не превратится в последовательность байт, как при заполнении формы. В это время кодировка определяется кодировкой HTML-страницы, в которой появляется форма, или атрибутом accept-charset элемента формы.

.
1
ответ дан 1 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

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