Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中正确比较来自psycopg2的unicode字符串?_Python_String_Unicode_Utf 8_Psycopg2 - Fatal编程技术网

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

如何在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""") >

我在比较从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
如果你打字

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”的编码不同。