Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 在列表/集合中存储UMLAUT_Python_Python 2.x - Fatal编程技术网

Python 在列表/集合中存储UMLAUT

Python 在列表/集合中存储UMLAUT,python,python-2.x,Python,Python 2.x,我有一些带有特殊德语字符(ÄÜÜäöüß)的单词,我想一个字母一个字母地重复这些单词。使用这些特殊字符会产生问题,因为它们会转换为两个字符: #!/usr/bin/env python # -*- coding: utf-8 -*- print "ä" # prints ä print len(["ä"]) # prints 1 print len(list("ä")) # prints 2 s = set() s.add("ä") a = next(iter(

我有一些带有特殊德语字符(ÄÜÜäöüß)的单词,我想一个字母一个字母地重复这些单词。使用这些特殊字符会产生问题,因为它们会转换为两个字符:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "ä"            # prints ä
print len(["ä"])     # prints 1
print len(list("ä")) # prints 2

s = set()
s.add("ä")
a = next(iter(s))

print s      # prints: set(['\xc3\xa4'])
print a      # prints: ä
print len(a) # prints: 2

我需要做哪些更改才能始终得到1作为答案,现在打印的是2?

在Python 2.7中,Unicode字符串的处理方式如下:

>>> print "ä"
ä
>>> len("ä")
2
>>> print u"ä"
ä
>>> len(u"ä")
1

使用Unicode字符串的
u
前缀。

您可以在python脚本的顶部使用此前缀(必须是第一条语句)

from\uuuuu future\uuuuu导入unicode\u文本

这具有将
u
前缀隐式应用于所有字符串的效果


这是,但作为良好实践的一部分,我倾向于避免unicode问题。您还应该按照评论中提到的@Basil Bourque的方法来做,阅读有关unicode的文章,以便了解更多信息。而且,与unicode_文字一样,这对于帮助避免此类问题也很重要。

将它们存储为unicode字符。这就解决了这个问题,我想如果你使用3.x,他们将打印为1个长度。我在3.4.3中试过你的代码,效果很好。请阅读维基百科上的文章。@Ernesto从使用
print s
可以看出,OP没有使用Python 3。在Python3中,这将是
print(s)
。字符串和Unicode在Python3.x中的处理方式根本不同。