Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 Unicode输入和输出IDE_Python_Unicode - Fatal编程技术网

Python Unicode输入和输出IDE

Python Unicode输入和输出IDE,python,unicode,Python,Unicode,当我在Eclipse IDE中运行我的程序时,下面的代码非常有效: address_name = self.text_ctrl_address.GetValue().encode('utf-8') self.address_list = [i for i in data if address_name.upper() in i[5].upper().encode('utf-8')] 但是当直接用python运行同一段代码时,我得到了一个“UnicodeDecodeError” IDE有什么不同

当我在Eclipse IDE中运行我的程序时,下面的代码非常有效:

address_name = self.text_ctrl_address.GetValue().encode('utf-8')
self.address_list = [i for i in data if address_name.upper() in i[5].upper().encode('utf-8')]
但是当直接用python运行同一段代码时,我得到了一个“UnicodeDecodeError”

IDE有什么不同之处使其不会出现此错误

ps:我对两个unicode字符串都进行编码,因为这是测试一个字符串与另一个包含像ñorç这样字母的字符串的唯一方法

编辑:


对不起,我应该提供更多细节:这段代码属于用WxPython构建的对话框。GetValue()函数从行编辑小部件获取文本,并尝试将此文本与数据库匹配。该程序在Windows上运行(正因为如此,上面的michael Shopsin可能是对的(“Win-1252到UTF-8是一个严重的麻烦”)。我已经读过很多次,我应该始终使用unicode,避免编码,但如果我不编码,某些字符串方法根据单词中的字符似乎工作得不太好(我在西班牙,有很多非ascii字符)。我的直接意思是“双击”文件本身,而不是在IDE中运行。

我可以解决将编码从UTF-8更改为cp1252(Windows西欧)的问题。显然UTF-8无法对某些Windows字符进行编码。感谢上面的Michael Shopsin提供的见解

该程序在windows上运行,并使用WxPython对话框,从行编辑小部件获取值,并将字符串与数据库匹配


谢谢大家的关注,我希望这篇文章能够帮助将来有类似问题的人。

我可以解决将编码从UTF-8更改为cp1252(Windows西欧)的问题。显然UTF-8无法编码一些Windows字符。感谢上面的Michael Shopsin的洞察力

该程序在windows上运行,并使用WxPython对话框,从行编辑小部件获取值,并将字符串与数据库匹配


感谢大家的关注,我希望这篇文章能帮助将来有类似问题的人。

Unicode DecodeDecorror表示将bytestring解码为Unicode时会发生错误

特别是,如果您尝试在Python 2上编码bytestring而不是Unicode字符串,则可能会发生这种情况:

>>> u"\N{EM DASH}".encode('utf-8').encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
注意:问题中的代码可能会产生令人惊讶的结果:

#XXX BROKEN, DON'T DO IT
...address_name.upper() in i[5].upper().encode('utf-8')...
address\u name.upper()
调用
bytes.upper
方法而
i[5]。upper()
调用
unicode.upper
方法。前者不支持unicode,可能取决于当前区域设置,后者更好,但要执行不区分大小写的比较,请改用
.casefold()
方法:

key = unicode_address_name.casefold()
... if key == i[5].casefold()...
通常,如果需要对unicode字符串进行排序,则可以使用。比较默认的字典排序:

>>> L = [u'sandwiches', u'angel delight', u'custard', u'éclairs', u'glühwein']
>>> sorted(L)
[u'angel delight', u'custard', u'gl\xfchwein', u'sandwiches', u'\xe9clairs']
按照
en_GB
locale中的顺序:

>>> import icu # PyICU
>>> collator = icu.Collator.createInstance(icu.Locale('en_GB'))
>>> sorted(L, key=collator.getSortKey)
[u'angel delight', u'custard', u'\xe9clairs', u'gl\xfchwein', u'sandwiches']

UnicodeDecodeError
表示将bytestring解码为Unicode时发生错误

特别是,如果您尝试在Python 2上编码bytestring而不是Unicode字符串,则可能会发生这种情况:

>>> u"\N{EM DASH}".encode('utf-8').encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
注意:问题中的代码可能会产生令人惊讶的结果:

#XXX BROKEN, DON'T DO IT
...address_name.upper() in i[5].upper().encode('utf-8')...
address\u name.upper()
调用
bytes.upper
方法而
i[5]。upper()
调用
unicode.upper
方法。前者不支持unicode,可能取决于当前区域设置,后者更好,但要执行不区分大小写的比较,请改用
.casefold()
方法:

key = unicode_address_name.casefold()
... if key == i[5].casefold()...
通常,如果需要对unicode字符串进行排序,则可以使用。比较默认的字典排序:

>>> L = [u'sandwiches', u'angel delight', u'custard', u'éclairs', u'glühwein']
>>> sorted(L)
[u'angel delight', u'custard', u'gl\xfchwein', u'sandwiches', u'\xe9clairs']
按照
en_GB
locale中的顺序:

>>> import icu # PyICU
>>> collator = icu.Collator.createInstance(icu.Locale('en_GB'))
>>> sorted(L, key=collator.getSortKey)
[u'angel delight', u'custard', u'\xe9clairs', u'gl\xfchwein', u'sandwiches']

“直接”?您的意思是从命令提示符?什么操作系统?您的控制台的编码是什么?我不知道Eclipse,但您的意思是“这是测试一个字符串与另一个字符串的唯一方法”?在现代Python中,如果您不做输入或输出(从文件、数据库或网络),您不需要担心编码/解码即使在这种情况下,许多API也可以透明地处理unicode。这个GetValue()方法是什么?哪个库?Win-1252到UTF-8是一个严重的麻烦,我支持Kelmer关于稳定编码的问题。“直接”?你的意思是从命令提示符?什么操作系统?你的控制台的编码是什么?我不知道Eclipse,但你的意思是什么“这是测试一个字符串与另一个字符串的唯一方法”?在现代Python中,如果您不进行输入或输出(从文件、数据库或网络),甚至在这种情况下,许多API都可以透明地处理unicode,那么您不必为编码/解码而烦恼。这个GetValue()是什么方法?哪个库?Win-1252到UTF-8是一个严重的麻烦,我支持Kelmer关于稳定编码的问题。没问题,我用很多语言处理过这个问题。”显然UTF-8不能编码一些Windows字符。"--这是不正确的。
cp1252
支持
0x100
字符,
utf-8
支持超过一百万个Unicode字符。
utf-8
可能在无效的Unicode文本上失败,例如,在一个单独的代理项上:
u'\udce2'
utf-8支持
cp1252
支持的所有字符。没问题,我已经“显然,UTF-8无法对某些Windows字符进行编码。”--它不正确。
cp1252
支持
0x100
字符,
utf-8
支持超过一百万个Unicode字符。
utf-8
可能在无效的Unicode文本上失败,例如在一个单独的代理项上:
u'\udce2'
utf-8支持
cp1252
支持的所有字符。