Как преобразовать текст UTF-8 в формат JSON - PullRequest
1 голос
/ 21 октября 2009

Я работал над проектом, в котором возникла проблема при кодировании текста UFT-8 в формат JSON

<?php 
 $result = array('wine'=>"测试", 'عربي'=>4, 'lemon'=>22);
 echo  json_encode($result);

и я также попробовал Zend_JSON Library,

<?php 
 require_once 'Zend/Json.php';
 $result = array('wine'=>"测试", 'عربي'=>4, 'lemon'=>22);
 echo Zend_Json::encode($result);

в обоих случаях вывод JSON был сумасшедшим:

{"wine":"\u0639\u0631\u0628\u064a ","\u0639\u0631\u0628\u064a":4,"lemon":22}

я пробовал это в PHP5.2.6 и PHP5.3, но тот же результат ..

Как мне преобразовать текст UTF-8 в JSON? Есть предложения?

Ответы [ 2 ]

2 голосов
/ 21 октября 2009

Это нотация в юникоде, понятная javascript / ecmascript. Попробуйте

<html>
  <head>
    <title>unicode test</title>
    <script type="text/javascript">
      function foo() {
        var outDiv = document.getElementById("bar");
        var jsondata = {"wine":"\u0639\u0631\u0628\u064a ","\u0639\u0631\u0628\u064a":4,"lemon":22};  
        for ( var k in jsondata ) {
          outDiv.innerHTML += k + "=" + jsondata[k] + "<br />";
        }
      }
    </script>  
  </head>
  <body onload="foo()">
    <div id="bar"></div>
  </body>
</html>

чтобы убедиться в этом.

http://www.ecmascript.org/docs/tc39-2009-043.pdf (стр. 14):

В строковых литералах, литералах регулярных выражений и идентификаторах любой символ (кодовая единица) также может быть выражен как escape-последовательность Unicode, состоящая из шести символов, а именно \ u плюс четыре шестнадцатеричных цифры.
1 голос
/ 21 октября 2009

Что именно сводит с ума на выходе?

var b = {"wine":"\u0639\u0631\u0628\u064a ", test:"\u0639\u0631\u0628\u064a","lemon":22};
alert (b.wine);

Этот код, кажется, успешно показывает عربي

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