如何在Python中正确比较来自psycopg2的unicode字符串?
我在比较从PostgreSQL数据库获取的UTF-8字符串时遇到问题:如何在Python中正确比较来自psycopg2的unicode字符串?,python,string,unicode,utf-8,psycopg2,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_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
如果你打字
b = 'München'
你从类型(b)中得到了什么
也许您不需要将字符串转换为unicode文本,因为Python会自动注意到这一点
编辑:我从python CLI获得以下内容:
>>> b = u'München'
>>> b
u'M\xfcnchen'
>>> print b
München
当您获取打印结果时,如果您键入
b = 'München'
你从类型(b)中得到了什么
也许您不需要将字符串转换为unicode文本,因为Python会自动注意到这一点
编辑:我从python CLI获得以下内容:
>>> b = u'München'
>>> b
u'M\xfcnchen'
>>> print b
München
当您以不同的编码获取打印结果时这显然是控制台的区域设置问题
u“München”
是Unicode中的u'M\xfcnchen'
,UTF-8中的'M\xc3\xbcnchen'
。如果采用ISO8859-1或CP1252,则后者是您的München
Psycopg2似乎为您提供了正确的Unicode值 这显然是您的控制台的区域设置有问题
u“München”
是Unicode中的u'M\xfcnchen'
,UTF-8中的'M\xc3\xbcnchen'
。如果采用ISO8859-1或CP1252,则后者是您的München
Psycopg2似乎为您提供了正确的Unicode值 >>>b='München'>>>键入(b)>>>我的区域设置是en_US.UTF-8,当我键入b并按enter键时,我得到:u'M\xc3\xbcnchen',而不是u'M\xfcnchen'。但在另一台机器上,我得到了你的名字。我一点也不明白,为什么在第二台机器上不同?这可能是因为第一台机器有Python2.5.2(r252:60911,2010年1月24日,14:53:14)和第二台Python2.6.6(r266:8429220010年12月26日,22:31:48)?>>>>b='München'>>>类型(b)>>>我的语言环境是en_US.UTF-8,当我键入b并按enter键时,得到的是:u'M\xc3\xbcnchen',而不是u'M\xfcnchen'。但在另一台机器上,我得到了你的名字。我一点也不明白,为什么在第二台机器上不同?这可能是因为第一台机器有Python2.5.2(r252:60911,2010年1月24日,14:53:14)和第二台Python2.6.6(r266:8429220010年12月26日,22:31:48)吗?你的sys.stdout.encoding和sys.stdin.encoding是什么?假设你的控制台编码是utf8,你应该实际使用
b='München'。decode('utf8')
得到你想要的。你的sys.stdout.encoding和sys.stdin.encoding是什么?假设你的控制台编码是utf8,你应该实际使用b='München'.decode('utf8')
得到你想要的。嗯,我的也是。查看sys.stdin.encoding
和sys.stdout.encoding
的值,两者都应该是“UTF-8”。也许可以尝试另一个终端模拟器。出于某种原因,您的终端和Python解释器看到相同的字符串“München”的编码不同。嗯,我的也是。查看sys.stdin.encoding
和sys.stdout.encoding
的值,两者都应该是“UTF-8”。也许可以尝试另一个终端模拟器。出于某种原因,您的终端和Python解释器看到相同的字符串“München”的编码不同。