• Python编码小记


      当用Python读取文件时,文件的编码方式与读取文件的方式似乎很有意思.

      一小段Python代码如下:

      

    #coding:utf-8
      if __name__ == '__main__':
        str=open('content.txt','r').readline()
        #str.decode('gbk').encode('utf-8')注意这行隐掉了
        str.decode('utf-8').encode('gbk')
        print str

    content.txt内容如下:

      啦啦啦啦,德玛西亚!!!1245abcd

    运行会报错:

    Traceback (most recent call last):
    File "C:Python27551059.py", line 5, in <module>
    str.decode('utf-8').encode('gbk')
    File "C:Python27libencodingsutf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0xc0 in position 0: invalid s
    tart byte
    >>>

    现在去掉# 并隐掉下一行,如下:

    #coding:utf-8
      if __name__ == '__main__':
        str=open('content.txt','r').readline()
        str.decode('gbk').encode('utf-8')注意这行隐掉了
        #str.decode('utf-8').encode('gbk')
        print str

    运行结果:

    啦啦啦啦,德玛西亚!!!1245abcd
    >>>

    现在好好来分析一下,encode和decode吧!网上大婶们的解释如下:

    字符串在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成其他编码

    查看记事本的编码格式:默认为ANSI,补充一下:不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码就代表 GB2312 编码!于是乎,我们对txt文件应先将gbk转换为Unicode,使Python可以识别txt中的内容,然后再将Unicode转换为utf-8就可以正确显示了.

      当然若是保存txt文件时选择以utf-8编码方式保存(UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。),那么第二段代码就会报错了!

  • 相关阅读:
    OAuth 2.0之授权码模式
    Rest和Restful & http
    HTTP1.1协议中文版-RFC2616
    Linux中安装Python2.7
    CvMat、Mat、IplImage之间的转换详解及实例
    ROS Node/Topic/Message/Service的一些问题
    ROS的tf_tree相关
    机器人路径规划(包括行人检测及动态避障总结)(长期更新)
    相关博客链接(长期更新)
    关于视觉里程计以及VI融合的相关研究(长期更新)
  • 原文地址:https://www.cnblogs.com/liumumu2014/p/3904249.html
Copyright © 2020-2023  润新知