Чтение символов UTF8 с использованием innerHTML возвращает 0xfffd для всех символов - PullRequest
0 голосов
/ 07 мая 2009

Я читаю HTML-документ, содержащий символы UTF-8, но когда я получаю доступ к innerHTML документа, все «плохие» символы отображаются как 0xfffd. Я пробовал во всех основных браузерах, и он ведет себя одинаково. Когда я alert() innerHTML, он показывает эти символы в виде «алмаза с меткой?» .

Удивительно, но следующее работает отлично, правильно отображая символ UTF-8 в окне предупреждения, поэтому он не alert() работает неправильно.

alert("Doppelg\u00e4nger!");

Почему я не могу получить доступ к символам UTF-8, используя innerHTML? Или есть другой способ доступа к ним в JavaScript.

Ответы [ 2 ]

2 голосов
/ 07 мая 2009

Сначала проверьте, содержит ли заголовок документа.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Вы также можете прочитать мета-теги с помощью JavaScript:

var metaTags = document.getElementsByTagName("META");

Если это так, это объяснение поведения. Вы можете попробовать изменить utf-8 на ISO-8859-1:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Лучше htmlEncode всех расширенных символов в вашем HTML. Как это:

function encodeHTML(str){
 var aStr = str.split(''),
     i = aStr.length,
     aRet = [];

   while (--i) {
    var iC = aStr[i].charCodeAt();
    if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
      aRet.push('&#'+iC+';');
    } else {
      aRet.push(aStr[i]);
    }
  }
 return aRet.reverse().join('');
}

Имейте в виду, эта функция закодирует все, что не является [a-zA-Z]. Например, эта функция будет кодировать Doppelgänger в Doppelgänger.

0 голосов
/ 07 мая 2009

Отправляется ли страница с кодировкой UTF-8? .innerHTML никогда не доставлял мне никаких проблем с UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...