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
    文本时,为什么不同的应用程序呈现相同的文本

  • Chrome中,为什么
    echo文件获取内容(“ChineseText.txt”)
    echo'張三'给出预期结果

  • 我知道我没有给出一个明确的问题陈述。我会尽快回复你的评论,因为这是一个困扰我很长时间的问题。提前谢谢

    ---更新---

    受@KyawLay的启发,我做了一个快速的实验


    我将
    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转换编码()
    非常感谢您的善意解释。这真的很有帮助。