python 2中的Unicode处理

时间:2016-06-08 19:10:00

标签: python python-2.7 unicode paramiko python-unicode

>>> cmd="echo ö"
>>> type(s1)
<str>
>>> print s1
echo ö
>>> chan.exec_command(cmd)

我从外部应用程序获取一些带有一些unicode字符的字符串。我应该如何正确处理我的python代码中的这个字符串?当我将它发送到paramiko exec_command方法时,我会得到如下例外情况。这里chan是我的Paramiko对象。

  

'ascii'编解码器无法编码位置136中的字符u'\ xfc':序数   不在范围内(128)

我需要在将此字符串发送到paramiko之前对其进行编码/解码。我是python的新手,任何帮助都会非常感激。 这是我要添加的字符串:

X0A3549029:[u'Uni\xf3n de Cr\xe9', u'DemoModel', 'NA']
Traceback (most recent call last):
  File "updateTelemetry.py", line 98, in <module>
    query="insert into record_tmp(sn,cname,model,product) values('"+key+"','"+value[0].decode('utf8')+"','"+value[1]+"','"+value[2]+"')"
  File "/usr/lib64/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
 UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 3: ordinal not in range(128)

2 个答案:

答案 0 :(得分:1)

使用.decode('utf8')将其转换为unicode类型:

>>> cmd="echo ö"
>>> type(cmd)
<type 'str'>
>>> cmd_unicode=cmd.decode('utf8')
>>> type(cmd_unicode)
<type 'unicode'>

PS:Python 2和3之间的Unicode处理不同。

答案 1 :(得分:1)

在Python 2上调用UnicodeEncodeError时,

.decode()表示输入是Unicode,因此Python首先使用sys.getdefaultencoding()尝试编码它应该是ASCII on Python 2在将其传递给.decode()方法之前。

删除.decode('utf8')来电 - value[0]已经是Unicode。

不相关:不使用字符串格式化来创建sql查询 - 改为使用参数化sql查询:

db.execute("insert into record_tmp(sn,cname,model,product) values(?,?,?,?)",
           [key] + values)

占位符语法可能会有所不同,具体取决于您使用的Python db-api模块,例如,它可能是%s而不是?