使用PHP将Windows-1252格式的csv文件转换为UTF-8

3
我将使用fopen来读取csv文件,使用fgetcsv来读取csv行。该csv编码为Windows-1252,如何将其转换为UTF-8,以便不会在没有标准字符的情况下切断行?
到目前为止,我尝试了以下方法:
setlocale(LC_ALL, 'en_GB.UTF-8');

并且

drupal_convert_to_utf8($csv_line[3], 'Windows-1251'); // (I'm using Drupal 6.16)

两者都似乎失败了。
2个回答

5
你可以使用iconv来完成这种工作。

我已经使用以下内容研究了iconv:$str = 'Felleskjøpet'; echo iconv('Windows-1252', 'UTF-8', $str);这将输出:Felleskj¿pet - digital
你确定你的输入是 Windows-1252 编码吗?你怎么相信它是这个编码的? - Guillaume Lebourgeois
当我保存测试php文件时,编码类型设置错误,将其设置为Windows-1525即可解决。我的下一个问题是如何让它与数据数组一起工作。 - digital
使用 iconv 时必须非常小心,因为如果您的 CSV 中有一个 UTF-8 字符,它就会变成乱码。 - NobleUplift

3
我不知道 drupal_convert_to_utf8 函数,但可以看一下 mb_convert_encoding。
尝试使用 mb_list_encodings 确保您的实现支持 Windows-1252。如果不支持,请尝试使用 ISO 8859-1,它基本上是相同的 (http://en.wikipedia.org/wiki/Windows-1252)。
您还应确保您的 csv 文件实际上是以 Windows-1252 编码的。尝试使用 mb_detect_encoding 进行检测,并使用 strict 标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接