【发布时间】:2012-12-28 23:20:00
【问题描述】:
我有一个客户端想要将 .csv 导出到服务器,PHP 将在服务器上对其进行解析,以便生成包含其数据的表。我正在使用 iconv 转换为适当的编码(UTF-8)。不幸的是,我在 Windows 上,所以我不知道源编码是什么。
MAC Excel 使用什么编码来生成 .csv?我尝试了很多不同的组合,但没有一个适用于法语口音,据我所知,它们在 MAC 字符集中的排列方式与在 UTF-8 中的排列方式不同
例如:
正确的显示应该是: “代表团”
大多数类型的编码(包括使用 utf8_encode())给出: 'DÈlÈgation'
Macintosh 到 UTF-8 给出: 'D»l»gation'
如果我在我的 PC 上打开从 MAC 保存的 .csv 文件,我会看到法语“é”重音为“È”,因此是否有可能将文件保存到我的计算机(或服务器)上将文件直接强制为 UTF-8,所以现在“È”是字符的直接值,而不是 UTF-8 编码误解?
十六进制转储
使用 bin2hex(),字符串的十六进制转储: 'DÈlÈgation 1' 是: 44c86cc8676174696f6e2031
-- 事实上,我假设它是 DÈlÈgation 而不是 Délégation,因为如果我在记事本(在我的 PC 上)中打开 .csv 文件,它会显示为 È 而不是 é。
【问题讨论】:
-
它没有任何编码,没有办法知道不同转换的什么样的错误导致文件最终用字节
0xc8代替é。 -
我想我最好只对文本中捕获的每个不正确字符执行 str_replace() 操作?
-
你说它应该是
Délégation。如果它应该是DÈlÈgation,那么它显然是在 Windows-1252 中。 -
是的,它应该是 Délégation。 .csv 文件在记事本或 PC 上的任何文本编辑器中打开时显示为 DÈlÈgation。
-
您的记事本所做的只是将其解码为 windows-1252,它不会像您的 php 代码在解码为 windows-1252 时那样神奇地显示正确的文本。
标签: php macos csv utf-8 character-encoding