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

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

alert("Doppelg\u00e4nger!");

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

0
Robinicks 7 Май 2009 в 20:48

2 ответа

Лучший ответ

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

<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.

2
KooiInc 7 Май 2009 в 17:49

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

0
Greg 7 Май 2009 в 16:56