欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 编码格式

程序员文章站 2022-07-14 19:21:10
...

学习总结一下自己碰到的python编码问题

1:文件是UTF-8,内容有中文

  • 直接打印中文
    python 编码格式python 编码格式
  • 结果:提示Non-ASCII
  • 原因:因为python 源码文件默认的编码是ASCII,识别不了中文(两个字符)
  • 解决方案: 在文件的开始【第一行或第二行】加入指定的能识别 Non-ASCII字符 的编码格式

2:直接控制台cmd打印中文

python 编码格式
- 结果:打印出的中文乱码
- 原因:这是因为zh使用utf8编码的,而到win cmd中的编码格式是 GB2312:936【可以通过chcp查看当前cmd编码格式】,输入是用utf8格式 , 输出用 GB2312 ,从而导致出错!
解决方案:zh = u’此处是中文’,这样做的目的就是将zh变成了unicode字符串。那么输出到cmd时就会encode(‘gb2312’),就可以正常显示了

3:写入文件出错

python 编码格式
- 结果:写入文件提示EncodeError。
- 原因:zh此刻从用utf8编码的字符串成了 unicode字符串,unicode 是中间编码,打印到cmd会将unicode->gb2312,所以打印到cmd不会乱码;但是f.write()出现乱码,是因为zh是unicode,但是用python 本身的ASCII码来识别,超出了0-127,python识别不了。

4. 写文件成功

python 编码格式
- 结果:写入文件成功!
- 原因: The encoding information is then used by the Python parser to interpret the file using the given encoding,也就是说指定了编码格式。。 除了coding:utf8之外,还有设置defaultencoding(‘utf8’)。

5.读取网页(requests)

  • 5.1 response.text() :response.encoding = ‘utf8’
    python 编码格式
    • 结果:写入文件中文不乱码
  • 5.2 response.text() :response.encoding = ‘ISO-8859-1’
    python 编码格式
    • 结果:写入中文乱码

总结:

  • 1 coding:utf8 保证源文件能存在中文
  • 2 reload(sys),sys.seddefaultencoding(‘utf8’) 是设置python默认编码格式,即字符串等都用utf8编码
  • 3 unicode是中间码,是编码格式转换的中间桥梁。如果unicode编码的字符串输出到IDE,那么可以正常显示;例如字符串是utf8,而IDE是gbk,那么输出到IDE需要decode为unicode。
  • 4 requests返回response对象 需要查看一下几个编码格式:

    # print response.headers['content-type']
    # print response.encoding
    # print '11',response.text
    # header = response.headers
    # print response.apparent_encoding
    # print requests.utils.get_encodings_from_content(response.content)
    # print type(response.text.decode(response.content))
    
  • 5 如果response.encoding=’ISO-8859-1’,那么需要设置为utf8

  • 6 如果response.encoding=gbk等其他编码,那么直接decode()就可以了。