zoukankan      html  css  js  c++  java
  • pyhton字符编码问题--decode和encode方法

    1  decode和encode方法

    字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

    decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

    encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

    因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

    (与代码本身的编码是一致的!)

    测试:
    我的eclipse里面代码为utf-8编码的。然后我这样写代码

    s="你好"
    s=s.decode('gb2312').encode('utf-8')
    print s
    报错:
    UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
    原因:因为我的文件为UTF-8编码的。所以你想用gb2312将其转成unicode是不可能的。

    所以正确的写法应当是:
    s="你好"
    print s
    s=s.decode('utf-8').encode('utf-8') 要用UTF-8来做编码
    print s
    哈哈发现打印出来的是乱码那只能说明一件事情就是我的eclipse控制台是GB2312的编码!

    请看:
    如何获得系统的默认编码?
    #!/usr/bin/env python
    #coding=utf-8
    import sys
    print sys.getdefaultencoding()

    该段程序在英文WindowsXP上输出为:ascii 。我发现我的linux上面也是ascii编码。所以我想打印出来看到的乱码是正常的。因为我其实是utf-8编码的。

    在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。(是的。我的eclipse控制台就是gb2312的编码所以我文件保存为utf-8的时候然后再通过打印是乱码了!)



    转自:http://www.2cto.com/kf/201207/142453.html


     *****    utf-8是可以直接输出的,print


     

  • 相关阅读:
    linux process management
    intel edison with grove lcd
    ODBC、OLEDB和ADO关系
    在线并使用数据库来推断在线
    大约laravel错误的解决方案
    cocos2dx-3.1加入cocosStudio参考库 libCocosStudio
    【甘道夫】基于Mahout0.9+CDH5.2执行分布式ItemCF推荐算法
    格式字符串分配stl::string
    希望开发一个指针的元素
    [Now] Configure secrets and environment variables with Zeit’s Now
  • 原文地址:https://www.cnblogs.com/catkins/p/5270558.html
Copyright © 2011-2022 走看看