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

У меня проблемы с переносом японских символов из 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-го блока пуст. Если я удалю «а» или «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.
    } 
  });

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

1 Ответ

2 голосов
/ 07 января 2010

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

setlocale(LC_ALL, 'ja_JP.EUC-JP'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...