zoukankan      html  css  js  c++  java
  • 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的可变长度字符编码,又称万国码。),那么第二段代码就会报错了!

  • 相关阅读:
    LeetCode偶尔一题 —— 617. 合并二叉树
    《剑指offer》 —— 链表中倒数第k个节点
    《剑指offer》 —— 青蛙跳台阶问题
    《剑指offer》—— 二维数组中的查找
    《剑指offer》—— 替换空格
    《剑指offer》—— 合并两个排序的链表
    《剑指offer》—— 礼物的最大价值
    生成Nuget 源代码包来重用你的Asp.net MVC代码
    Pro ASP.Net Core MVC 6th 第四章
    Pro ASP.NET Core MVC 6th 第三章
  • 原文地址:https://www.cnblogs.com/liumumu2014/p/3904249.html
Copyright © 2011-2022 走看看