MySQL中的UTF-8文本在IPython Notebook中未显示

3 投票
1 回答
1309 浏览
提问于 2025-04-17 14:10

我刚开始学习编程,但我会用谷歌,所以在经过很多尝试和错误后,我敢于向你们求助。

我有一个MySQL数据库(数据库名:text,表名:text),里面存储的是utf-8编码的瑞典文本。我想用mysql-python(MySQLdb)把这些文本提取到IPython Notebook中进行进一步处理。

我看过关于Unicode和UTF-8的Python文档(http://docs.python.org/2/howto/unicode.html),但我找不到具体的代码示例,尽管这应该是个非常简单的问题。

我只想让瑞典语的文本在IPython Notebook中显示出来,包括特殊字符,比如å、ä、ö等。正如你们所看到的,我已经尝试了网上找到的几乎所有关于Unicode和UTF-8的代码片段,但我还是不明白我哪里出错了?

有人能帮我一下吗?

# -*- coding: utf-8 -*-
import MySQLdb
db = MySQLdb.connect('localhost', 'user', 'password', 'text', charset='utf8', use_unicode=False)
db.set_character_set('utf8')
cursor = db.cursor()
cursor.execute('SET NAMES utf8')
cursor.execute('SET CHARACTER SET utf8')
cursor.execute('SELECT title, body FROM text LIMIT 5') 
result=cursor.fetchall()
 print result

更新:这是我从Print语句中得到的结果: (('F\xc3\xb6rsta rubriken', 'H\xc3\xa4r \xc3\xa4r lite text p\xc3\xa5 svenska'), ('Andra rubriken', 'Ytterligare lite text p\xc3\xa5 ett annat spr\xc3\xa5k'))

1 个回答

2

你正在打印游标调用的结果,这个结果是一个元组;所以你看到的是它在Python中的表现形式。

如果你对它进行循环处理,你会看到你期待的结果:

>>> for i in result:
...    print "{} {}".format(*i)
... 
Första rubriken Här är lite text på svenska
Andra rubriken Ytterligare lite text på ett annat språk

如果你的输出和上面的不一样,那就说明你的终端不支持UTF-8编码。

撰写回答