1

我正在尝试处理从 Twitter 流 API 获得的文本,我收到一个外国文本,当我尝试将其保存到 mysql 数据库时,我不断收到错误消息:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to <undefined>

他的文字是这样的:

\u0421\u043c\u043e\u0440\u0438\u0442\u0435

我系统的编码设置是

>>> print sys.stdout.encoding
cp437

我现在想处理文本并将其保存到 mysql 数据库的最佳方法是什么?

谢谢..

4

1 回答 1

1

您显然不能将该文本保存为 cp437,因为 cp437 没有任何与 U+0421 匹配的字符等。

因此,您必须选择一种有效的编码使用它。UTF-8 是显而易见的选择。

您可以在创建 MySQL 数据库时设置它的字符集。您的 Python 脚本在连接时必须设置相同的字符集。例如,如果您使用的是 pyMySQL:

conn = pymysql.connect(usual=parameters, blah=blah, charset='utf8')

然后你可以unicode按原样给它对象。

如果您有一个使用不同字符集的预先存在的数据库,则必须对其进行转换。并更改与数据库通信的任何其他脚本也使用 UTF-8。

请注意,某些 MySQL 绑定(尤其是对于 PHP 或 perl 等其他语言)可能根本不理解字符集。在将每个字符串参数传递给 SQL 语句并将每个字符串解码为从行集中接收到的 UTF-8 之前,您必须使用将每个字符串参数显式编码为 UTF-8 的代码将它们包装起来。(而且它可能还需要SET NAMES UTF-8在第一次连接时显式执行,我不确定。)

于 2013-11-12T22:11:41.550 回答