Python 2.7 python 2.7中的斯堪的纳维亚字母(æ;ø;å;)
因此,在python中使用“æ”、“ø”和“å”时,我遇到了一个奇怪的问题 我包括:#——编码:utf-8——Python 2.7 python 2.7中的斯堪的纳维亚字母(æ;ø;å;),python-2.7,character-encoding,special-characters,Python 2.7,Character Encoding,Special Characters,因此,在python中使用“æ”、“ø”和“å”时,我遇到了一个奇怪的问题 我包括:#——编码:utf-8—— 在每个文件的顶部,并且æå打印得很好,因此无需担心。但是如果我做了len('æ')我得到2。我正在制作一个程序,在其中我循环分析丹麦文本,所以这是一个大问题。 下面是python终端的一些示例来说明问题: In [1]: 'a'.islower() Out[1]: True In [2]: 'æ'.islower() Out[2]: False In [3]: len('a') O
在每个文件的顶部,并且æå打印得很好,因此无需担心。但是如果我做了
len('æ')
我得到2。我正在制作一个程序,在其中我循环分析丹麦文本,所以这是一个大问题。
下面是python终端的一些示例来说明问题:
In [1]: 'a'.islower()
Out[1]: True
In [2]: 'æ'.islower()
Out[2]: False
In [3]: len('a')
Out[3]: 1
In [4]: len('æ')
Out[4]: 2
In [5]: for c in 'æ': print c in "æøå"
True
True
In [6]: print "æøå are troublesome characters"
æøå are troublesome characters
我可以通过简单地执行c来解决islower()和isupper()不适用于“æ”、“ø”和“å”的问题。islower()或“æå”中的c
检查c是否是小写字母,但如上所示,“æ”的两个部分都将作为小写字母计算,并被加倍计算
有没有一种方法可以让这些字母像其他字母一样
我在windows 10上运行Python2.7,使用canopy作为获取所需sklearn和numpy的简单方法。您偶然发现了Python2中字符串默认为字节的问题。使用标题#——编码:utf-8——您只告诉解释器您的源代码是utf-8,但这对字符串的处理没有影响 问题的解决方案是使用decode方法将所有字符串转换为unicode对象,例如
danish_text_raw = 'æ' # here you would load your text
print(type(danish_text_raw)) # returns string
danish_text = danish_text_raw.decode('utf-8')
print(type(danish_text)) # returns <type 'unicode'>
例如,要确保使用unicode字符串,可以使用此函数来确保
def to_unicode(in_string):
if isinstance(in_string,str):
out_string = in_string.decode('utf-8')
elif isinstance(in_string,unicode):
out_string = in_string
else:
raise TypeError('not stringy')
return out_string
谢谢,很好用。但令人讨厌的是,如果一切都是英语,那就简单多了:)
def to_unicode(in_string):
if isinstance(in_string,str):
out_string = in_string.decode('utf-8')
elif isinstance(in_string,unicode):
out_string = in_string
else:
raise TypeError('not stringy')
return out_string