Json_encode aracılığıyla Japonca karakterler (UTF-8) ile geçen bir problem

1 Cevap php

Ben json_encode yoluyla JavaScript PHP Japon karakterleri aktarırken bir sorun yaşıyorum.

İşte csv dosyadan okunan ham veridir.

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

Sorun yankı json_encode ($ return_value), $ return_value verilerin üstünde içeren 2-boyutlu dizi nerede tarafından bu verileri geçerken, Japon kelime 'テスト' ajax yanıt tarafta düştü ve boş dize olarak gösterilir gets olduğunu. Ben 'bir テスト' ya da '1 テスト '2. ve yukarıdaki örneğin 3 hatları gibi Japon kelimenin başında herhangi alfabetik / sayısal karakter, koymak Ancak, bu kelimeler ok geçmiş olsun.

Aşağıda veri ajax yanıt tarafında gibi görünüyor nasıl. Gördüğünüz gibi, 1 blok 3. eleman boştur. Ben yukarıdaki ham verilerin başka deyişle gelen 'a' ya da '1 'kaldırırsanız, bu karakterler çok tepki tarafta boş olur. Bu şimdiye kadar test ettiğimiz Japonca karakterlerin her türlü oluyor.

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

Herkes bu neden oluyor herhangi bir fikir var mı ve bu sorunu nasıl aşabiliriz?

Burada her taraftan bir kod parçasıdır.

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

Şimdiden teşekkürler yardımınız için çok!

1 Cevap

Ben sorunu () fonksiyonu EUC-JP karakterleri tanımak mümkün olmayan PHP fgetcsv olduğunu bulundu. Görünüşe göre, fgetcsv() uses the system locale setting to make assumptions about character encoding. Ben başvurulan örnek gösterir (ancak ters bir şekilde) gibi) (fgetcsv yapmadan önce sınırının altında ekledik ve bu sorunu giderildi!

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