2016-11-17 68 views
1

我想操作存储在表中的数据。表列有瑞典名称,Å,Ä或Ö。Python不能使用瑞典字符

的Python壳牌可打印字符,但是当我把它们存储在一个列表他们不会工作:

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

什么我需要做的就是蟒蛇有,A型和O工作?

编辑:

这将工作由@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

当打印清单,请注意,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 
+0

你是正确的,没有什么是错的ÅÄÖ's。这是我列出的字段中的一个错字。谢谢 – BERA

1

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

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

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