Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 python 2.7中的斯堪的纳维亚字母(æ;ø;å;)_Python 2.7_Character Encoding_Special Characters - Fatal编程技术网

Python 2.7 python 2.7中的斯堪的纳维亚字母(æ;ø;å;)

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

因此,在python中使用“æ”、“ø”和“å”时,我遇到了一个奇怪的问题

我包括:#——编码:utf-8——
在每个文件的顶部,并且æå打印得很好,因此无需担心。但是如果我做了
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