当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中读取Unicode输入并比较Unicode字符串?

如何解决《如何在Python中读取Unicode输入并比较Unicode字符串?》经验,为你挑选了2个好方法。

我在Python工作,想读取Unicode格式的用户输入(从命令行),即相当于Unicode的raw_input

此外,我想测试Unicode字符串是否相等,看起来标准==不起作用.



1> tzot..:

raw_input()返回由OS或UI工具编码的字符串.困难在于知道哪个是解码.您可以尝试以下操作:

import sys, locale
text= raw_input().decode(sys.stdin.encoding or locale.getpreferredencoding(True))

哪些应该在大多数情况下正常工作.

我们需要更多关于不使用Unicode比较的数据来帮助您.但是,这可能是一个正常化的问题.考虑以下:

>>> a1= u'\xeatre'
>>> a2= u'e\u0302tre'

a1a2是等价的,但不等于:

>>> print a1, a2
être être
>>> print a1 == a2
False

所以你可能想要使用这个unicodedata.normalize()方法:

>>> import unicodedata as ud
>>> ud.normalize('NFC', a1)
u'\xeatre'
>>> ud.normalize('NFC', a2)
u'\xeatre'
>>> ud.normalize('NFC', a1) == ud.normalize('NFC', a2)
True

如果您向我们提供更多信息,我们可能会为您提供更多帮助.


`text = raw_input().decode(sys.stdout.encoding)`应该是`text = raw_input().decode(sys.stdin.encoding)`它读得更好;)

2> dF...:

它应该工作.raw_input返回一个字节字符串,您必须使用正确的编码对其进行解码以获取unicode对象.例如,以下适用于我在Python 2.5/Terminal.app/OSX下:

>>> bytes = raw_input()
??? ????????
>>> bytes
'\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xce\x95\xce\xbb\xce\xbb\xce\xb7\xce\xbd\xce\xb9\xce\xba\xce\xac'

>>> uni = bytes.decode('utf-8') # substitute the encoding of your terminal if it's not utf-8
>>> uni
u'\u65e5\u672c\u8a9e \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac'

>>> print uni
??? ????????

至于比较unicode字符串:你能发布一个比较不起作用的例子吗?

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有