我无法通过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响应方面的数据。如您所见,第1个块的第3个元素为空。如果我从上述原始数据的其他单词中删除“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.
}
});
非常感谢您的帮助!
答案 0 :(得分:2)
我发现问题是PHP fgetcsv()函数无法识别EUC-JP中的字符。显然,fgetcsv() uses the system locale setting to make assumptions about character encoding。我在执行fgetcsv()之前添加了下面的行,如引用的示例所示(但是以相反的方式),它修复了问题!
setlocale(LC_ALL, 'ja_JP.EUC-JP');