正在尝试读取泰国的csv文件';使用php在其中输入字符,但在读取后,字符被更改为一些未识别的字符

正在尝试读取泰国的csv文件';使用php在其中输入字符,但在读取后,字符被更改为一些未识别的字符,php,csv,character-encoding,Php,Csv,Character Encoding,我有一个csv文件,其中包含如下数据: Sub District District A Hi อาฮี Tha Li District ท่าลี่ A Phon อาโพน Buachet District บัวเชด $f = fopen('thai_unicode.csv',"r"); while($line = fgets($f)){ $sub_district = mb_substr($line,0,20); $district = mb_

我有一个csv文件,其中包含如下数据:

Sub District    District
A Hi อาฮี        Tha Li District ท่าลี่
A Phon อาโพน    Buachet District บัวเชด
$f = fopen('thai_unicode.csv',"r");
while($line = fgets($f)){
    $sub_district = mb_substr($line,0,20);
    $district = mb_substr($line,20);
    echo "sub_district: $sub_district, district: $district\n";
}
fclose($f);
当我试图通过以下方式使用php代码阅读它时:


您的代码有两个问题:

  • 您的代码将str_getcsv应用于整个文件内容(而不是单个行)
  • 您的代码示例使用了分隔符“;”,但输入文件中没有这样的符号
您的数据采用固定字段长度格式(实际上不是csv文件)或以制表符分隔的csv文件格式

如果是制表符分隔的文件格式,则可以使用两种方式读取文件:

$lines = file('thai_unicode.csv');

foreach($lines as $line){
    $data =  str_getcsv($line,"\t");
    echo "sub_district: ". $data[0].", district: ".$data[1]."\n";
}

如果您有固定长度的字段数据格式,您需要自己拆分每一行,因为与csv相关的php函数不适合此用途。 所以你会得到这样的结果:

Sub District    District
A Hi อาฮี        Tha Li District ท่าลี่
A Phon อาโพน    Buachet District บัวเชด
$f = fopen('thai_unicode.csv',"r");
while($line = fgets($f)){
    $sub_district = mb_substr($line,0,20);
    $district = mb_substr($line,20);
    echo "sub_district: $sub_district, district: $district\n";
}
fclose($f);

您的代码有两个问题:

  • 您的代码将str_getcsv应用于整个文件内容(而不是单个行)
  • 您的代码示例使用了分隔符“;”,但输入文件中没有这样的符号
您的数据采用固定字段长度格式(实际上不是csv文件)或以制表符分隔的csv文件格式

如果是制表符分隔的文件格式,则可以使用两种方式读取文件:

$lines = file('thai_unicode.csv');

foreach($lines as $line){
    $data =  str_getcsv($line,"\t");
    echo "sub_district: ". $data[0].", district: ".$data[1]."\n";
}

如果您有固定长度的字段数据格式,您需要自己拆分每一行,因为与csv相关的php函数不适合此用途。 所以你会得到这样的结果:

Sub District    District
A Hi อาฮี        Tha Li District ท่าลี่
A Phon อาโพน    Buachet District บัวเชด
$f = fopen('thai_unicode.csv',"r");
while($line = fgets($f)){
    $sub_district = mb_substr($line,0,20);
    $district = mb_substr($line,20);
    echo "sub_district: $sub_district, district: $district\n";
}
fclose($f);