如果PHP str_getcsv()包含日语字符,则不能正确解析CSV

时间:2019-02-05 05:50:52

标签: php csv parsing cjk fgetcsv

我正在尝试使用file()函数将Excel文件转换为数组。一些字段包含日语字符。对于那些领域,我没有获得正确的数据。

这是我的代码行

$data = array_map('str_getcsv', file($path));

2 个答案:

答案 0 :(得分:2)

我只能猜测没有细节,例如输入的日语字母是如何错误转换的。

str_getcsv()看到系统语言环境,因此设置日语语言环境可能会解决此问题。

此代码

setlocale(LC_ALL, 'ja_JP');
$data = array_map('str_getcsv', file('japanese.csv'));
var_dump($data);

在我的本地计算机上使用以下CSV文件(japanese.csv,保存为UTF-8)。

日本語,テスト,ファイル
2行目,CSV形式,エンコードUTF-8

结果是

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(9) "日本語"
    [1]=>
    string(9) "テスト"
    [2]=>
    string(12) "ファイル"
  }
  [1]=>
  array(3) {
    [0]=>
    string(7) "2行目"
    [1]=>
    string(9) "CSV形式"
    [2]=>
    string(20) "エンコードUTF-8"
  }
}

如您所见,str_getcsv()要求您知道在输入CSV文件中使用哪种语言。这次,您可以确定输入始终为日语,但如果其语言不可预测,则不能用于解析CSV。另外,您需要注意如果在不同的环境中使用代码,可能会丢失定向语言环境。

答案 1 :(得分:1)

我已经通过使用

解决了问题
mb_convert_encoding($csv_data[$i][2],"UTF-8", "SJIS");

这会将所有Shift-JIS编码的字符转换为UTF-8。