python将字符编码更改为utf_8

时间:2015-10-22 06:11:14

标签: python

实际数据:CN=usernameOU=CompanyNameDC=companyDC=intra(在MySQL数据库中看起来如何)以及当我获取此数据时,这就是它的样子python变量(从MySQL检索):CN=usernameOU=CompanyNameDC=companyDC=intra

当我尝试这个时;

truestr = unicode(str,'utf-8');

使用此消息抛出异常:

  

'ascii'编解码器无法解码位置4中的字节0xc4:顺序不在   范围(128)

如何解决此问题? (我使用python 2.6)

4 个答案:

答案 0 :(得分:2)

您可以按照以下方法检查编码:

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> 

如果编码为ascii,则设置为utf-8

  1. 打开以下文件(我使用的是Python 2.7):

    /usr/lib/python2.7/sitecustomize.py

  2. 然后更新以下utf-8

    sys.setdefaultencoding("utf-8")

  3. [编辑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(或intfloat等)是一种非常糟糕的风格。

答案 3 :(得分:0)

系统的默认编码为ASCII。使用“sys.setdefaultencoding”将其切换为utf-8编码。此功能仅在python扫描环境时启动时可用。要使用此功能,您必须在导入模块后重新加载sys。以下是您的问题代码。

import sys
reload(sys)
sys.setdefaultencoding ("utf-8")

修改

如果您想使用utf-8编码,请在代码的最开头使用它。如果在代码中间使用它,则会产生已经加载的ascii数据的问题。