【问题标题】:A problem with passing Japanese characters(UTF-8) via json_encode通过 json_encode 传递日文字符(UTF-8)的问题
【发布时间】:2011-01-02 03:05:16
【问题描述】:

我在通过 json_encode 将日文字符从 PHP 传输到 JavaScript 时遇到问题。

这是从 csv 文件中读取的原始数据。

PRODUCT1,QA,テスト
PRODUCT2,QA,aテスト
PRODUCT3,QA,1テスト

问题在于,当通过 echo json_encode($return_value) 传递这些数据时,其中 $return_value 是包含上述数据的二维数组,日语单词“テスト”被删除并在 ajax 响应端显示为空字符串.但是,如果我在日语单词的开头放置任何字母/数字字符,例如上述示例的第 2 行和第 3 行的“aテスト”或“1テスト”,这些词就可以通过了。

下面是数据在 ajax 响应端的样子。如您所见,第一个块的第三个元素是空的。如果我从上述原始数据的其他单词中删除“a”或“1”,这些字符在响应端也会变为空。到目前为止,我测试过的任何一种日语字符都会发生这种情况。

[["PRODUCT1","QA",""],["PRODUCT2","QA","a\u30c6\u30b9\u30c8"],["PRODUCT3","QA","1\u30c6\u30b9\u30c8"]]

有人知道为什么会发生这种情况以及我如何克服这个问题吗?

这是双方的部分代码。

 PHP:
 function getFileContents($dirName,$filename){

    $return_value = array();
    $my_file= fopen($dirName . $filename, "r");

    $row = 0;
    while (($data = fgetcsv($my_file, 1000, ",")) !== FALSE) {
        $num = count($data);
         for ($c=0; $c < $num; $c++) {
            #csv file is written in euc-jp so convert to utf-8 here.
            $return_value[$row][$c] = mb_convert_encoding($data[$c], "UTF-8", "EUC-JP");
         }
         $row++;
    } 
    fclose($my_file);

    echo json_encode($return_value);
  }

  JavaScript:
  $.ajax({
     type: "POST",
     url: "data.php",
     data: { 
        "dirName" : "./data/",
        "filename" : filename
     },
     dataType :"json",
     success : function(response){
          // more code
          // At this point, Japanese characters are already empty strings.
    } 
  });

非常感谢您提前提供的帮助!

【问题讨论】:

    标签: php utf-8 character-encoding json


    【解决方案1】:

    我发现问题是 PHP fgetcsv() 函数无法识别 EUC-JP 中的字符。显然,fgetcsv() uses the system locale setting to make assumptions about character encoding。我在执行 fgetcsv() 之前添加了以下行,如引用的示例所示(但以相反的方式),它解决了问题!

    setlocale(LC_ALL, 'ja_JP.EUC-JP'); 
    

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多