如何在PHP中使用fgetcsv()来处理日文字符?

Chr*_*ris 5 html php unicode fopen

我从谷歌电子表格RSS订阅源生成以下数据.

????,go,5 
???,come,5 
?????,"go home, return",5 
????,school,5 
????,supermarket,5 
??,station,5 
????,airplane,5 
Run Code Online (Sandbox Code Playgroud)

使用PHP我可以执行以下操作:

$url = 'http://google.com.....etc/etc';
$data = file_get_contents($url);

echo $data; // This prints all Japanese symbols
Run Code Online (Sandbox Code Playgroud)

但如果我使用:

$url = 'http://google.com.....etc/etc';
$handle = fopen($url);

while($row = fgetcsv($handle)) {
    print_r($row); // Outputs [0]=>,[1]=>'go',[2]=>'5', etc, i.e. the Japanese characters are skipped
}
Run Code Online (Sandbox Code Playgroud)

因此,无论是使用时出现的日文字符被跳过fopenfgetcsv.

我的文件保存为UTF-8,它有PHP标头将其设置为UTF-8,并且HTML头中有一个元标记将其标记为UTF-8.我不认为它是自己的文档,因为它可以通过该file_get_contents方法显示字符.

谢谢

Emp*_*pty 3

我无法对Darien 的答案添加评论

我重现了该问题,更改区域设置后问题得到解决。在尝试重复此操作之前,您必须在服务器上安装 jp 语言环境。

Ubuntu 在文件 /var/lib/locales/supported.d/local 中添加一个新行

ja_JP.UTF-8 UTF-8
Run Code Online (Sandbox Code Playgroud)

并运行命令

sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)

或者

sudo locale-gen
Run Code Online (Sandbox Code Playgroud)

Debian 只需执行“dpkg-reconfigure locales”并选择必要的区域设置(ja_JP.UTF-8)

我不知道如何在其他系统上执行此操作,请尝试通过关键字“locale-gen locale”搜索您的服务器操作系统。

在 php 文件中,在打开 csv 文件之前,添加此行

setlocale(LC_ALL, 'ja_JP.UTF-8');
Run Code Online (Sandbox Code Playgroud)