python - 如何在 Python 中正确比较来自 psycopg2 的 unicode 字符串?

标签 python string unicode utf-8 psycopg2

我在比较从 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

最佳答案

这显然是您的控制台区域设置的问题。

u"München" 在 Unicode 中是 u'M\xfcnchen' 在 UTF-8 中是 'M\xc3\xbcnchen'。如果采用 ISO8859-1 或 CP1252,后者就是您的 München

Psycopg2 似乎可以为您提供正确的 Unicode 值,这是应该的。

关于python - 如何在 Python 中正确比较来自 psycopg2 的 unicode 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4738642/

相关文章:

python - 对日期时间数据帧进行排序和组合 Pandas Python

python - 使用 python 从目录加载图像并 reshape

python - 如何合并具有重复键的字典列表

python - 在应用程序上下文之外获取配置变量

python - 如何将字符串作为变量插入到字符串中?

regex - 为什么 Perl 用 "1"替换我的字符串?

java - Java 1.8 中的 switch-case 与 Eclipse 不可能吗?

Ruby 输出 Unicode 字符

Python 将 unicode 减号转换为 float

visual-studio-2010 - 使用 unicode 保存文件时 Emacs 加载字符集映射失败