Как исправить кодировку символов в IE8 родной JSON? - PullRequest
7 голосов
/ 03 апреля 2010

Я использую json с текстом в кодировке Unicode, и у меня возникла проблема с нативной реализацией json в IE8.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<script>
    var stringified = JSON.stringify("สวัสดี olé");
    alert(stringified);
</script>

При использовании json2.js или нативного json в FireFox строка alert() такая же, как и в исходной. IE8, с другой стороны, возвращает значения Unicode, а не исходный текст \u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35 ol\u00e9. Есть ли простой способ заставить IE вести себя как другие, или преобразовать эту строку так, как она должна быть? И считаете ли вы это ошибкой в ​​IE, я думал, что нативные реализации json должны были быть заменой идентичных json2.js?

Редактировать: репродукция в jsfiddle с использованием приведенного выше кода - http://jsfiddle.net/vV4uz/

Ответы [ 4 ]

7 голосов
/ 29 октября 2010

Чтобы ответить на мой собственный вопрос - очевидно, это невозможно изначально в IE8, но в бета-версии IE9 он работает правильно.

A исправить возможно, хотя:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<script>
    var stringified = JSON.stringify("สวัสดี olé");
    stringified  = unescape(stringified.replace(/\\u/g, '%u'));
    alert(stringified);
</script>

, который будет правильно предупреждать () возвращать исходную строку на всех IE, FF и Chrome.

1 голос
/ 04 апреля 2010

Если это перед отправкой на сервер, вы можете сначала закодировать его encodeURIComponent (JSON.stringify ("" olé ")) и использовать декодер utf8 на сервере

0 голосов
/ 04 октября 2013

Я думаю, регулярное выражение:

unescape (stringified.replace (/ \ u / g, '% u'));

слишком агрессивно. Если у вас на входе была строка '\ u', которая не была символом UTF, она все равно перехватила бы ее.

Я думаю, что вам нужно это:

экранирования в (stringified.replace (/ ([^ \\]) \\ и ([0-9] [0-9] [0-9] [0-9]) / г, "$ 1% U $ 2 «));

Это изменит \ uxxxx последовательности только в том случае, если x является цифрой, а вся последовательность не обрабатывается обратной косой чертой (\).

0 голосов
/ 04 марта 2013

Убедитесь, что ваш сервер правильно настроен. Мой отвечал, даже для файлов JSON в юникоде:

Content-Type: text/html; charset=ISO-8859-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...