在列表/集中存储变音符号

时间:2015-05-19 14:00:10

标签: 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(s))

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

我需要改变什么来获得总是1作为答案,现在打印2?

2 个答案:

答案 0 :(得分:3)

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

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

使用u前缀作为Unicode字符串。

答案 1 :(得分:1)

您可以在python脚本的顶部使用它(必须是第一个语句)

from __future__ import unicode_literals

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

这是not uncontroverisal,但我的偏好是避免unicode问题的良好做法的一部分。你也应该像评论中提到的@Basil Bourque那样做,并阅读有关unicode的文章,以便你了解情况。而且,除了unicode_literals之外,unicode sandwich对于帮助避免这些问题非常重要。