PHP的编码是什么';s文件写入功能?
我正在使用将PHP的编码是什么';s文件写入功能?,php,utf-8,Php,Utf 8,我正在使用将.csv文件转换为JSON。(.csv文件的内容是中文的。)然后我使用file\u put\u contents('myfile.JSON',$JSON)将JSON字符串写入文件 myfile.json在使用记事本打开时正确显示,在命令行中回显时正确显示,但在使用升华文本打开时,会弹出如下可怕的文本: [{"¶mÂí¥«°Ï":"«n¬ñ¶m","¥æ©ö¼Ðªº":"¤g¦a", ........ }] 在Chrome上打开时会出现同样难看的文本 我从记事本复制正确的文本,并将
.csv
文件转换为JSON
。(.csv
文件的内容是中文的。)然后我使用file\u put\u contents('myfile.JSON',$JSON)
将JSON
字符串写入文件
myfile.json
在使用记事本打开时正确显示,在命令行中回显时正确显示,但在使用升华文本打开时,会弹出如下可怕的文本:
[{"¶mÂí¥«°Ï":"«n¬ñ¶m","¥æ©ö¼Ðªº":"¤g¦a", ........ }]
在Chrome上打开时会出现同样难看的文本
我从记事本复制正确的文本,并将其粘贴到升华文本升华文本正确渲染文本。我将新文件保存在升华文本并重新打开,它会正确渲染
问题:
UTF-8
文本时,为什么不同的应用程序呈现相同的文本echo文件获取内容(“ChineseText.txt”)
在echo'張三'代码>给出预期结果
我将
file\u put\u contents
编辑为file\u put\u contents(“myFile”,utf8\u encode)($result)
。然后在记事本中打开时,它显示的与升华文本和Chrome中显示的丑陋文本完全相同。我猜这是因为文本已被编码两次。因此,首先,Chrome和升华文本必须在背景中对文本进行编码,从而导致双重编码问题渲染错误。正确吗?文件\u put\u内容
不进行任何编码转换,它所做的只是将原始字节转储到原始文件中。由于您可以在一个应用程序中看到预期的内容,这意味着这是可行的。由于您使用的函数本身不进行任何编码转换,这意味着无法执行结果与原始文件的编码相同,不管是什么
问题很简单,纯文本文件没有在任何地方声明其编码。它只是原始字节的累积。完全由读取应用程序以正确的编码解释这些字节。记事本恰好正确地执行了此操作。在这种情况下,升华恰好猜错了。如果您显式打开文件,告诉Subli告诉我它采用什么编码,它也应该可以(不确定该选项在Sublime中的确切位置)。同样的事情也适用于您的浏览器;如果您不通过Content-Type
HTTP头告诉它您发送的内容采用什么编码,它可能会猜错
顺便说一句,你不应该像函数那样手工拼凑JSON,你应该使用JSON\u encode
。因为JSON\u encode
只适用于UTF-8,所以你可能需要将CSV数据从任何编码转换为UTF-8
当您执行echo'張三'
或将内容复制并粘贴到Submite中,因为随后内容将以Submite保存为的任何编码(可能是UTF-8)保存,这恰好是浏览器默认期望的
我建议将其作为编码介绍。
文件内容
不关心任何编码。它只接受字符串并按原样写入字节。查看文件内容()和编码。检查mb\u检测编码()
和mb\u转换编码()
非常感谢您的善意解释。这真的很有帮助。