我有一个名为“tweets”的数据库表。我使用Twitter Search API下载了推文。根据MySQL的建议,数据库表排序规则设置为latin1_swedish_ci,因为它至少支持Enlish语言(我在某个地方的MySQL支持页面上读过这个)。
无论如何,我现在看到很多推文看起来像这样:
$S&P news: Bank of America’s Mortgage-Bond Accord http://bit.ly/oTXC5a
@LucciAlerts >> $BAC from a pincher play setup
미êµì‹ 용등급ì´ë–¨ì–´ì¡Œë„¤ RT @CNBC RT @alexcrippen: S&P affirms AA+
非常感谢任何帮助!
答案 0 :(得分:3)
这看起来像iso-8859中的utf-8双重编码。我已经看过很多次了,但是从来没有像这样说过。
修复您的应用
要保存从twitter API收到的所有特殊字符,您的数据库应该是utf8排序规则,而不是latin1。使用latin1_swedish_ci是一个非常糟糕的建议。
此外,您的PHP应用程序的数据库连接可能未正确设置为使用utf8。
请在此处阅读:http://www.php.net/manual/en/function.mysql-set-charset.php PHP手册中的注释总是值得一读。
如果你使用zend或其他库,通常有一种支持的方法告诉PDO或任何数据库层在db连接中使用utf8。
如果可以,请删除所有内容,并在转换整理和客户端字符集tu utf8后再次开始填充数据库。
修复数据
如果您无法删除所有内容,则必须直接在数据库中修复双重或三重编码utf8字符串的ascii表示。
“修复”这个数据是一项复杂的任务。最简单的方法是使用latin1 collation数据库连接检索它的转储并使用utf-8数据库连接将其写回。 但在您的情况下,数据似乎是UTF-8中的三重或四重编码。
请在此处阅读:http://blog.hno3.org/2010/04/22/fixing-double-encoded-utf-8-data-in-mysql/
普罗蒂普: 在开始使用数据存储之前,将它的两个转储放在一边。一个使用iso8859客户端字符集,另一个使用utf8客户端字符集。
现在您可以尝试修复它。在执行链接博客文章中描述的过程之前,还尝试使用mysql CONVERT
将数据库表转换为UTF8。