【发布时间】:2011-04-26 18:19:53
【问题描述】:
我现在正在抓头发几天。我用谷歌搜索和stackoverflow 很多都没有成功。
我正在从 csv 文件导入一些数据。此 CSV 文件是在 Windows 或 Mac 上的 Excel 中生成的,它提供了 2 种不同的编码“Windows-1251”和“MacRoman”。两者都是 ISO-8859-1 的变体,mb_detect_encoding 没有帮助:它总是检测我放入列表中的第一个编码。
例如:
mb_detect_encoding($buffer, 'macroman, windows-1251, UTF-8');
会给出“宏指令”。
使用相同的字符串,尝试:
mb_detect_encoding($buffer, 'windows-1251, macroman, UTF-8');
将给出“window-1251”。
那么你怎样才能正确地做出改变呢?我需要将我的输入字符串(csv 文件内容)转换为 utf-8 以插入数据库。
也许我错过了什么?你们通常如何设法解析csv文件,并将数据正确保存在DB(utf8)中。
感谢您提供任何线索!
【问题讨论】:
-
你从哪里得到这个 csv 文件?如果来自站点 - 也许在标题中声明的字符集?如果手动上传 - 也许可以在上传之前更改文件的编码?
-
您的数据实际上是否包含任何非纯 ascii(高于 0x7F 的字符代码)的内容,或者您实际上是否有一个 ISO-8859-1 字符和另一个有西里尔文?
-
我不会信任 mb_detect_encoding() 并允许用户选择数据源。根据数据文件中的内容,mb_detect_encoding() 可能会也可能不会产生好的结果。
-
该文件的 Windows 版本是通过电子邮件发送给我的,当我在 Textmate 中打开它时,它告诉我它是 ISO-8859-1。如果我打开我自己在 Mac 上生成的版本,它会告诉我 MacRoman。到现在为止还挺好。数据主要包含 ISO-8859-15 字母(法语字母如 éèêàùôç...)。然后我将文件上传到我的 webapp 并尝试转换为 utf8。 utf8_encode 适用于文件的 windows 版本, iconv('MacRoman', 'UTF-8', $fileContent) 适用于 Mac 版本。到目前为止,感谢您的 cmets。
标签: php encoding csv import-from-excel