Python不适用于瑞典语字符

时间:2016-11-17 09:39:52

标签: python character-encoding

我正在尝试操纵存储在表格中的数据。表格列的瑞典名称为Å,Ä或Ö。

Python Shell可以打印字符,但是当我将它们存储在列表中时,它们将无法工作:

>>> print 'åäö'
åäö
>>> testlist = ['åäö', 'öööö']
>>> testlist
['\xe5\xe4\xf6', '\xf6\xf6\xf6\xf6']
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> 

我需要做些什么才能让python与Å,Ä和Ö?

一起使用

编辑:

这将按照@schwobaseggl的建议工作:

>>> testlist = ['åäö','ööö']
>>> for x in testlist:
    print x
    print repr(x)
åäö
'\xe5\xe4\xf6'
ööö
'\xf6\xf6\xf6'
我很困惑。我真正想要做的是提供一个UpdateCursor字段列表。我猜测字段列表看起来不像'åäö'到光标但是'\ xe5 \ xe4 \ xf6'并且光标在尝试将列表中的字段与表中的实际字段匹配时失败:

with arcpy.da.UpdateCursor(fc, fieldlist) as ucursor:
    for row in ucursor:
        ...

2 个答案:

答案 0 :(得分:2)

打印列表时,请注意list __str__(由print隐式调用)使用其元素' __repr__以显示它们。似乎没有错。检查:

>>> testlist = ['åäö', 'öööö']
>>> print testlist
['\xc3\xa5\xc3\xa4\xc3\xb6', '\xc3\xb6\xc3\xb6\xc3\xb6\xc3\xb6']

>>> for x in testlist:
...   print x, repr(x)
...
åäö '\xc3\xa5\xc3\xa4\xc3\xb6'
öööö '\xc3\xb6\xc3\xb6\xc3\xb6\xc3\xb6'

当您处理非ascii字符时,通常最好使用unicode字符串。他们的表现更为出色:

>>> len('öäü')
6
>>> len(u'öäü')
3
>>> s = 'äöü'
>>> s_u = s.decode('utf-8')
>>> s
'\xc3\xa4\xc3\xb6\xc3\xbc'
>>> s_u
u'\xe4\xf6\xfc'
>>> s == s_u
False

答案 1 :(得分:1)

['\ xe5 \ xe4 \ xf6','\ xf6 \ xf6 \ xf6 \ xf6']嗯,这是不好的故事 - 这意味着列表内容不是文本。只有字节序列。

为了正确使用所有语言,您可以使用字符串前缀“u”。 例如(俄语 - 我的键盘上没有任何瑞典语字符),

str =u'Привет!'