Проблема с передачей японских символов (UTF-8) через json_encode

У меня возникли проблемы с переносом японских символов с PHP на JavaScript через json_encode.

Вот исходные данные, прочитанные из csv-файла.

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

Проблема заключается в том, что при передаче этих данных echo json_encode ($ return_value), где $ return_value является двумерным массивом, содержащим выше данные, японское слово «テ ス ト» отбрасывается и отображается как пустая строка на стороне ответа ajax. Однако, если я помещаю алфавитные / цифровые символы в начале японского слова, например «a テ ス ト» или «1 テ ス ト», которые являются 2-й и 3-й строками приведенного выше примера, эти слова передаются в порядке.

Ниже показано, как данные выглядят на стороне ответа ajax. Как вы можете видеть, 3-й элемент 1-го блока пуст. Если я удалю '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. } }); 

Большое спасибо за вашу помощь заранее!

Related of "Проблема с передачей японских символов (UTF-8) через json_encode"

Я обнаружил, что проблема связана с тем, что функция fgetcsv () PHP не может распознавать символы в EUC-JP. По-видимому, fgetcsv () использует настройку локали системы, чтобы сделать предположения о кодировке символов . Я добавил строку ниже, прежде чем делать fgetcsv (), как показывает ссылочный пример (но обратным образом), и он исправил проблему!

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