无法用有效的中文写文件

时间:2012-06-21 13:41:50

标签: php unicode utf-8

print_r()正确显示中文字符,但一旦将其写入文件,我尝试在记事本,Wordpad和Microsoft Word中打开它,它显示为美元共付é¡Â計劃

        print_r($contents);
        exit;
        if (file_put_contents($this->outPath.$dataFile, $contents) === false) {
            $this->_throwError('Error: Unable to write data file: "'.$this->outPath.$dataFile.'"');
        }

我也没试过这个尝试过:

        $handle = fopen($this->outPath.$dataFile, "w+b");  //binary mode prevents any conversion
        fwrite($handle, $contents);
        fclose($handle);

该文本是有效的UTF-8所以我不确定可能是什么问题

1 个答案:

答案 0 :(得分:1)

简单:记事本,写字板和Word都是微软的产品,臭名昭着的编码期望UTF-8编码的文件以BOM开头。如果您不包含BOM,则它们无法正确识别编码并错误解释文件。

通常不建议将BOM添加到UTF-8编码文件,只有Microsoft Universe似乎需要/更喜欢它。您需要确定哪个更糟糕:可能通过包含BOM或者以某种方式在Word / Note(-pad)中使用正确的编码手动打开文件来引入问题。

PHP中的BOM就是这样:

$bom = "\xEF\xBB\xBF";

将其添加到您的文件中。