Php fopen或fwrite使用unicode创建文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Php fopen或fwrite使用unicode创建文本相关的知识,希望对你有一定的参考价值。

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

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

创建文件后,它显示为:"Du00e9lai 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, "xEFxBBxBF");

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

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

答案

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

但你可以使用JSON_UNESCAPED_UNICODE选项:

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

产出:

{"test":"du00e9lai"}
{"test":"délai"}

来自documentation

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

以上是关于Php fopen或fwrite使用unicode创建文本的主要内容,如果未能解决你的问题,请参考以下文章

向 fwrite / fopen / fclose 进程添加内容头

MATLAB fwrite 怎么换行

PHP将数据写入指定文件中

php

fopen()fwrite()fread()函数使用说明与示例

php fwrite换行