Кто делает конвертацию при копировании/вставке?

Предположим, у меня есть поле ввода на веб-странице с кодировкой UTF8; предположим, я открываю текстовый файл, закодированный с помощью ISO-8859-1 в качестве кодировки.

Теперь я копирую и вставляю строку со специальными символами (например, ô) из файла в поле ввода: я вижу, что специальные символы отображаются в поле ввода правильно.

Кто делает преобразование из ISO-8859-1 в UTF8? Браузер?


person markzzz    schedule 26.04.2011    source источник


Ответы (2)


Когда вы открываете файл и копируете/вставляете его в браузер, он оказывается в Unicode, так как это то, что элементы управления пользовательского интерфейса браузера используют внутри. Кто на самом деле выполняет преобразование из ISO-8859-1 в Unicode, зависит от нескольких факторов (какую ОС вы используете, скомпилирован ли выбранный вами текстовый редактор для использования Ansi или Unicode, какой формат(ы) буфера обмена — CF_TEXT для Ansi, CF_UNICODETEXT для Unicode — приложение использует для копирования и т. д.). Но в любом случае, когда веб-браузер отправляет форму, он затем кодирует свои данные Unicode в кодировку HTML/формы во время передачи.

person Remy Lebeau    schedule 26.04.2011

По всей вероятности, он на самом деле не конвертируется в UTF-8, а во внутреннее представление символов, используемое браузером, которое, скорее всего, будет UTF-16 (независимо от кодировки веб-страницы).

person Simon Nickerson    schedule 26.04.2011
comment
Этот. Но учтите, что если вам нужна UTF-8, вы можете указать допустимые кодировки. <form action="file.php" method="post" accept-charset="UTF-8">. Я не уверен, изменяет ли это внутренний набор символов браузера, когда пользователь его редактирует, но это гарантирует, что данные UTF-8 отправляются на сервер (в совместимых браузерах, которые, я думаю, почти все из них на данный момент точка). - person Will Martin; 27.04.2011
comment
@Will: не IE, у которого причудливая интерпретация значения этого атрибута. И нет, это действительно не меняет внутреннего представления строки; И ECMAScript, и DOM требуют операций для работы с кодовыми единицами UTF-16, поэтому внутри почти неизбежно будет UTF-16LE или BE. (На самом деле LE, хотя вам все равно.) - person bobince; 27.04.2011