2015-10-07 7 views
-1

Я попытался кодировок UTF-8 для отображения ä, он отображается некоторые квадрат.Динамически загрузить кодировку, UTF-8 и ISO-8859-1 от Javascript

Кроме того, я попытался с кодировкой ISO-8859-1 для отображения Код, он, как отображаемая ä. (что является правильным)

Но если вы комбинируете оба символа в состоянии javascript, он не работает должным образом. См ниже код,

<html> 
    <head> 
     <script type="text/javascript"> 
      var lang = 'German'; 
      function f(){   
       if(lang != 'SomeOtherLanguage'){ 
        //here code will execute. And page should display square box. Instead of square box, ä is displayed. Which is wrong. I cant able to find reason. 
        metaTag = '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>';     
       } 
       else 
        metaTag = '<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>';     

       document.getElementsByTagName('head')[0].innerHTML += metaTag; 
      }   
     </script> 
    </head> 
    <body onload="f()"> 
     <h1>Latin letter : ä </h1> <br /> 
    </body> 
</html> 
+2

Совет: всегда используйте 'utf-8', а вместо' ä' используйте эквивалент объекта: 'ä'. Больше символов здесь: http://dev.w3.org/html5/html-author/charref – ojovirtual

+2

@ojirirtual Если вы правильно используете UTF-8, то зачем использовать объект HTML ?! Это чертовски бессмысленно. – deceze

+1

Это похоже на обратное решение: как только ваш JavaScript работает, HTML уже был интерпретирован. Почему бы вам просто не использовать UTF-8 и убедиться, что сервер правильно отправляет данные? –

ответ

0

Вы не можете, набор символов устанавливается анализатором, который должен разобрать Javascript для того, чтобы сгенерировать этот мета-DOM.

Вы по-прежнему можете использовать только один набор символов и преобразовывать данные.

0

То, что вы пытаетесь сделать, никогда не будет работать.

Если исходные байты вашего HTML не кодируются как UTF-8 для начала, вы не можете требовать UTF-8, в теге <meta> или заголовке HTTP Content-Type. Вы лжете браузеру/клиенту, и именно поэтому вы получаете плохие результаты.

Ваш код будет «работать», только если ваш тег <meta> утверждает, что ISO-8859-1 (и для заголовка Content-Type нет заголовка), если ваш HTML действительно закодирован в ISO-8859-1. В нескольких (но не всех) кодировках ISO-8859-X, включая ISO-8859-1, ä, кодируется как байты 0xE4, поэтому ваш код «работает», когда требуется ISO-8859-1, если байт 0x34 присутствует в Исходные данные HTML.

В UTF-8, ä вместо этого кодируется как байты 0xC3 0xA4. Если ваш HTML содержит байт 0xE4, но вы претендуете на UTF-8, вы получаете плохие результаты (0xE4 не является допустимым байтом в UTF-8).

Итак, ваш тег <meta> (и HTTP Content-Type) должен требовать кодировку, которая фактически соответствует реальной кодировке необработанных байтов HTML.

Если ваш HTTP-сервер обслуживает статический файл HTML, файл кодируется в определенной кодировке, когда HTML сохраняется в файле. Эта же кодировка должна быть указана статически в теге <meta> (и предпочтительно также в заголовке HTTP Content-Type). Если ваш HTTP-сервер генерирует HTML динамически, ему необходимо кодировать HTML в определенной кодировке для передачи, поэтому ему нужно указать ту же кодировку в сгенерированном теге <meta> (и заголовок Content-Type).

Другими словами, прекратите пытаться лгать браузеру/клиенту. Скажи правду, тогда ты больше не столкнешься с этой проблемой.