6

我有读取远程文件内容并将其写入本地服务器的脚本。文件包含字符:ąčęėįšųūž。数据插入本地文件后,UTF-8 编码丢失。我的脚本代码:

<?php 

$data = file_get_contents('remote_file_address');

echo $data; //encoding is ok

$file = dirname(__FILE__) . '/../downloads/data.csv';

file_put_contents($file,$data); //invalid encoding in data.csv file

?>

我也按照这篇文章的说明进行了操作(如何以 UTF-8 格式编写文件?),但还是不行。

那么这有什么问题呢?有任何想法吗?

4

3 回答 3

12

问题是使用 windows-1257 编码的远程文件。我在这里找到了解决方案。

所以正确的代码应该是这样的:

<?php 

$data = file_get_contents('remote_file_address');

$data = iconv("CP1257","UTF-8", $data);

$file = dirname(__FILE__) . '/../downloads/data.csv';

file_put_contents($file,$data);

?>
于 2012-06-20T10:03:34.040 回答
8

PHP 不知道编码。PHP 中的字符串只是存储原始字节的字节数组。从某处读取字符串时,文本以原始字节读取并存储在原始字节中。写入文件时,PHP 将原始字节写入文件。PHP 在任何时候都不会自行转换编码。您在任何时候都不需要做任何特别的事情,您需要做的就是不要自己弄乱编码。如果一开始的编码是 UTF-8,如果你不碰它,它仍然是 UTF-8。

如果在其他程序中打开最终文件时编码很奇怪,很可能是其他程序误解了编码。该文件很好,只是没有正确显示。

于 2012-06-20T08:44:09.510 回答
1

确保您的脚本和远程文件以 UTF-8 编码,并确保您用于读取 data.csv 的软件以 UTF-8 读取它。我个人使用 Notepad++ 来检查这一点。如果你所有的东西都是 UTF-8,你不需要任何 *utf8_(en|de)code 函数。如果您的远程文件未以 UTF-8 编码,则必须使用它们

于 2012-06-20T08:35:54.690 回答