Php fopen或fwrite使用unicode创建文本

问题描述 投票:2回答:1

我正在尝试使用fopen和fwrite编写一个文件。我有一个打印时显示正常的数组。

例如,我可以看到"Délai de livraison"被打印出来。

创建文件后,它显示为:"D\u00e9lai de livraison"。如果我理解的话,“\ u00e9”是unicode。

我尝试添加“BOM”并将其写入文件的开头,但没有任何变化。

//Write $newarray to a file   

$filename = 'translations_fr.json';

 //create json file
 $file = base_path('/imports/') . $filename;
 $fp = fopen($file, 'w');

 //BOM 
  fwrite($fp, "\xEF\xBB\xBF");

fwrite($fp, json_encode($newarray));
fclose($fp);

我的IDE是Netbeans,默认配置为UTF-8。我试过utf8_encode(),但没有运气。我能做什么?

php character-encoding fwrite
1个回答
2
投票

这不是BOM或fwrite()问题。默认情况下,json_encode()会将所有多字节字符转换为unicode格式。

但你可以使用JSON_UNESCAPED_UNICODE选项:

echo json_encode(['test'=>'délai']);
echo json_encode(['test'=>'délai'], JSON_UNESCAPED_UNICODE);

产出:

{"test":"d\u00e9lai"}
{"test":"délai"}

来自documentation

从字面上对多字节Unicode字符进行编码(默认为以\ uXXXX转义)。从PHP 5.4.0开始提供。

© www.soinside.com 2019 - 2024. All rights reserved.