2010-01-06 3 views
1

J'ai des problèmes pour transférer des caractères japonais de PHP vers JavaScript via json_encode.Un problème avec le passage des caractères japonais (UTF-8) via json_encode

Voici les données brutes lues à partir du fichier csv.

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

Le problème est que lors du passage de ces données par écho json_encode (return_value $), où return_value $ est un tableau 2-dimentionnelle contenant plus de données, le mot japonais « テ ス ト » est abandonné et affiché sous forme de chaîne vide le côté de réponse ajax. Cependant, si je mets des caractères alphabétiques/numériques au début du mot japonais, comme 'a テ ス ト' ou '1 テ ス ト' qui sont les 2ème et 3ème lignes de l'exemple ci-dessus, ces mots sont passés ok.

Ci-dessous se trouve l'aspect des données du côté de la réponse ajax. Comme vous pouvez le voir, le 3ème élément du 1er bloc est vide. Si je supprime 'a' ou '1' des autres mots des données brutes ci-dessus, ces caractères deviennent également vides du côté de la réponse. Cela arrive à tous les caractères japonais que j'ai testés jusqu'à présent.

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

Est-ce que quelqu'un a une idée pourquoi cela se passe et comment je peux résoudre ce problème?

Voici une partie du code de chaque côté.

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. 
    } 
    }); 

Merci beaucoup pour votre aide à l'avance!

Répondre

Questions connexes