如何将UTF-8文本转换为JSON格式

时间:2009-10-21 19:01:03

标签: php json

我正在研究将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 个答案:

答案 0 :(得分:2)

这是javascript / ecmascript理解的unicode符号。 尝试

<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页):

在字符串文字,正则表达式文字和标识符中,任何字符(代码单元)也可以表示为由六个字符组成的Unicode转义序列,即\ u加上四个十六进制数字。

答案 1 :(得分:1)

输出到底有多疯狂?

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

该代码似乎成功显示عربي