实际数据:CN=username
,OU=CompanyName
,DC=company
,DC=intra
(在MySQL数据库中看起来如何)以及当我获取此数据时,这就是它的样子python变量(从MySQL检索):CN=username
,OU=CompanyName
,DC=company
,DC=intra
当我尝试这个时;
truestr = unicode(str,'utf-8');
使用此消息抛出异常:
'ascii'编解码器无法解码位置4中的字节0xc4:顺序不在 范围(128)
如何解决此问题? (我使用python 2.6)
答案 0 :(得分:2)
您可以按照以下方法检查编码:
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>
如果编码为ascii
,则设置为utf-8
打开以下文件(我使用的是Python 2.7):
/usr/lib/python2.7/sitecustomize.py
然后更新以下utf-8
sys.setdefaultencoding("utf-8")
[编辑2]
您可以在巡演代码中添加以下内容(在开始时),然后检查: -
>>> try:
... import apport_python_hook
... except ImportError:
... pass
... else:
... apport_python_hook.install()
...
>>> import sys
>>>
>>> sys.setdefaultencoding("utf-8")
>>>
>>>
答案 1 :(得分:2)
转到此文件
vi /usr/lib/python2.7/site-packages/sitecustomize.py
添加此文字
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
答案 2 :(得分:1)
此错误表示您的消息已 unicode
个对象,无需解码。
当你这样做时:
truestr = unicode(string, 'utf-8')
首先使用默认的string
编解码器将变量str
隐式转换为'ascii'
类型。当然,它失败了,因为你的字符串包含非ascii字符。
如果您想将string
写为UTF-8,请使用string.encode('utf-8')
。
注意:由于与内置str
类型的名称冲突,我已将您的string
变量重命名为str
。命名变量str
(或int
或float
等)是一种非常糟糕的风格。
答案 3 :(得分:0)
系统的默认编码为ASCII。使用“sys.setdefaultencoding”将其切换为utf-8编码。此功能仅在python扫描环境时启动时可用。要使用此功能,您必须在导入模块后重新加载sys。以下是您的问题代码。
import sys
reload(sys)
sys.setdefaultencoding ("utf-8")
修改强>
如果您想使用utf-8编码,请在代码的最开头使用它。如果在代码中间使用它,则会产生已经加载的ascii数据的问题。