【发布时间】:2013-08-24 16:02:57
【问题描述】:
我正在尝试解析一个表示其字符集为 ISO-8859-2 的 XML 文件 (http://jstryczek.blox.pl/rss2)。我的数据库是 UTF-8,所以我想把它转换成 UTF-8。
为此,我在字符串上运行以下命令:
$content = iconv('ISO-8859-2', 'UTF-8//TRANSLIT', $content);
由于某种原因,我得到了一个奇怪的编码,所以:
Gdzie są różnice
通过:
Gdzie sÄ róşnice
有没有解释为什么波兰字符没有通过? UTF-8 不支持吗?
【问题讨论】:
-
UTF-8 支持所有波兰语字符,我敢肯定。
-
您使用哪个数据库,如何定义列,如何将文本存储在数据库中,以及如何检索它? UTF-8 很好地支持这些字符。事实上,stackoverflow 网站完全采用 UTF-8 格式,如您所见,发布它们没有问题。
-
我将 MariaDB 与 UTF8 中的表一起使用,客户端连接也是 UTF8。我认为某种隐式转换正在某处发生,只是不确定在哪里。
-
您是否尝试过将连接字符集设置为 latin_2 并将数据按原样发送到数据库? MySQL(和我想象的 MariaDB)能够在从客户端发送的编码到数据库/表的编码之间进行转换。我以前用它来将 UTF-8 转换为 cp850 以便在 Windows cmd 中正确显示。
-
原来,这就是我需要做的魔法。我有一些代码可以验证 UTF-8 中的某些字符,这些字符会扰乱隐式发生的转换。我将它包装在一个检查中,首先验证该字符串是 UTF-8,然后我的问题就消失了。我认为 Curl、PHP 或 MariaDB 都在进行隐式转换,而我的显式转换使其加倍,从而导致了问题。