我有特殊的德语字符(ÄÖÜäöüß),并希望逐字逐句地迭代。拥有这些特殊字符会产生问题,因为它们会转换为两个字符:
#!/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?
答案 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对于帮助避免这些问题非常重要。