Я всегда везде использую UTF-8. Но я только что наткнулся на странную проблему.
Вот минимальный пример HTML-файла:
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function Foo()
{
var eacute_utf8 = "\xC3\xA9";
var eacute_ansi = "\xE9";
document.getElementById("bla1").value = eacute_utf8;
document.getElementById("bla2").value = eacute_ansi;
}
</script>
</head>
<body onload="Foo()">
<input type="text" id="bla1">
<input type="text" id="bla2">
</body>
</html>
HTML содержит заголовок кодировки utf-8, поэтому на странице используется кодировка utf-8. Следовательно, я ожидал бы, что первое поле будет содержать символ «é» (e острый), а второе поле - что-то вроде «�», поскольку один байт E9 не является допустимой строкой в кодировке utf-8.
Однако, к моему удивлению, первый содержит 'Ã ©' (как будто данные utf-8 интерпретируются как некоторый вариант ansi, вероятно, iso-8859-1 или windows-1252), а второй содержит фактический символ 'é' . Почему это!?
Обратите внимание, что моя проблема не связана с конкретной кодировкой, которую использует мой текстовый редактор - именно поэтому я использовал явные конструкции символов \ x. Они содержат правильное двоичное представление (в формате, совместимом с ascii) этого символа в кодировках ansi и utf-8.
Предположим, я хотел бы вставить символ «ę», это unicode U + 0119 или 0xC4 0x99 в кодировке utf-8, которого нет в iso-8859-1, windows-1252 или latin1. Как такое вообще возможно?