在 lists/sets 中存储变音符号
Storing umlauts in lists/sets
我有一些带有特殊德语字符 (ÄÖÜäöüß) 的单词,我想逐个字母地遍历这些单词。拥有这些特殊字符会产生问题,因为它们被转换为两个字符:
#!/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?
在Python2.7中,Unicode字符串是这样处理的:
>>> print "ä"
ä
>>> len("ä")
2
>>> print u"ä"
ä
>>> len(u"ä")
1
对 Unicode 字符串使用 u
前缀。
您可以在 python 凭证的顶部使用它(必须是第一个语句)
from __future__ import unicode_literals
这具有将 u
前缀隐式应用于所有字符串的效果。
这not uncontroverisal but it's my preference as part of good practice to avoid unicode issues. You should also do as @Basil Bourque mentioned in comments, and read the article about unicode so you are well informed. And, as well as unicode_literals, the unicode sandwich对于帮助避免此类问题很重要。
我有一些带有特殊德语字符 (ÄÖÜäöüß) 的单词,我想逐个字母地遍历这些单词。拥有这些特殊字符会产生问题,因为它们被转换为两个字符:
#!/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?
在Python2.7中,Unicode字符串是这样处理的:
>>> print "ä"
ä
>>> len("ä")
2
>>> print u"ä"
ä
>>> len(u"ä")
1
对 Unicode 字符串使用 u
前缀。
您可以在 python 凭证的顶部使用它(必须是第一个语句)
from __future__ import unicode_literals
这具有将 u
前缀隐式应用于所有字符串的效果。
这not uncontroverisal but it's my preference as part of good practice to avoid unicode issues. You should also do as @Basil Bourque mentioned in comments, and read the article about unicode so you are well informed. And, as well as unicode_literals, the unicode sandwich对于帮助避免此类问题很重要。