【发布时间】:2011-06-11 22:31:22
【问题描述】:
我在比较从 PostgreSQL 数据库获得的 UTF-8 字符串时遇到问题:
>>> db_conn = psycopg2.connect("dbname='foo' user='foo' host='localhost' password='xxx'")
>>> db_cursor = db_conn.cursor()
>>> sql_com = ("""SELECT my_text FROM table WHERE id = 1""")
>>> db_cursor.execute(sql_com)
>>> sql_result = db_cursor.fetchone()
>>> db_conn.commit()
>>> db_conn.close()
>>> a = sql_result[0]
>>> a
u'M\xfcnchen'
>>> type(a)
<type 'unicode'>
>>> print a
München
>>> b = u'München'
>>> type(b)
<type 'unicode'>
>>> print b
München
>>> a == b
False
我真的很困惑为什么会这样,我可以有人告诉我应该如何将一个字符串与数据库中的元音变音符号与另一个字符串进行比较,所以比较是真的吗?我的数据库是 UTF8:
postgres@localhost:$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
foo | foo | UTF8
【问题讨论】:
-
你是什么sys.stdout.encoding和sys.stdin.encoding?
-
假设您的控制台编码是 utf8,您实际上应该使用
b = 'München'.decode('utf8')来获得您所期望的。
标签: python string unicode utf-8 psycopg2