2013-03-19 64 views

回答

3

什么@Thanakon指出,简单是正确的:你可以在的Unicode做到这一点字符串

你问过为什么尽管Python对“窄”字符串没有这样做。原因是:Unicode是一个真正的庞大的的东西 - 在内存和处理方面。这绝对不是微不足道的。看看Unicode的定义或ICU Library的实现。

当Python被构思出来时,早在90年代初,字符串的Unicode并不是一个大问题。对于Python社区向后兼容性一直是一个大问题。因此,在某些2.x版本中做“在窄字符串上进行unicode升级”会非常困难。

但是其他人在2000年代对这个解决方案并不满意,所以他们发明了新数据类型unicode。如果您将数据放在那里,您将获得完整的Unicode功能。还有其他模块,以方便您...

哦,顺便说一句:你显示的窄字符串必须是解释代码页之前它是有道理的unicode-ish。当你的字符串显示这里是许多编码解释一个(ISO-8859-1,也许?)

但现在的好东西:在的Python 3他们决定它的价值,打破向后兼容性。默认字符串然后一个Unicode字符串!当你在Python 3中编写'hello'时,它与Python 2 u'hello'中的相同。并且你可以获得Unicode功能。

无论哪种方式,在Python 2 u'blah'或Python 3 'blah'你必须确保蟒蛇文件是保存在UTF-8(或类似)。在Python 3中,它是standard encoding*.py -files,在Python 2中,您必须包含文件编码的add an header-line# -*- coding: utf-8 -*-,或者确保编辑器编写UTF-8 BOM mark

10

在默认情况下使用Unicode的Python 3中,它应该可以工作。

在Python 2,你必须强迫它,这将这样的伎俩:

u'ô TRAM'.upper() 

u防止翻译成ASCII文本。 (其余为Unicode)

3

你标记你的问题作为unicode,但你永远不使你的unicode字符串:

>>> print u'ô TRAM'.upper() 
Ô TRAM 
>>> print 'ô TRAM'.upper() 
ô TRAM 
相关问题