美文网首页
python2的编码问题

python2的编码问题

作者: 靳晓阳s | 来源:发表于2017-10-29 22:03 被阅读45次

在使用Python2做中文相关代码时候,如果不是很熟悉Python2中的编码,那么十有八九你会被这个搞的很烦,所以下面就把编码问题搞个明白

名词解释

ASCII码

个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0

Unicode编码

英语只用ASCII码就足够了,但其它语言不行啊,所以就会有很多编码方式。编码方式不同,就会出现乱码的问题。

那么这时候有这么一种编码,把所有的符号都纳入其中,就不再会有乱码的问题,这就是Unicode。

UTF-8

UTF-8就是Unicode的一种实现方式,是当前比较通用的一种编码方式。为什么不直接用Unicode呢,因为太浪费空间了。

为什么要编码和解码

计算机内存中,统一使用Unicode编码,需要保存或者传输时,转换成UTF8编码。

那么编码就是从Unicode转换成UTF-8或者ASCII,解码就是从UTF-8或ASCII转化为Unicode。

编码和解码是为了不出先乱码,可以正常的读写。

Python2中的编码

声明文件

Python2中默认的文件编码格式为ASCII码,所以我们一般会在文件开头声明文件编码为UTF-8.

# -*- coding: utf-8 -*-
  1. 如果不设置声明文件,则按照python2默认的ASCII码编码方式
  2. 如果声明编码和实际编码不一致,则会按照实际编码读取

str和unicode

其次Python2中的有两种类型,一种是 str,另一种是 unicode,如下

str1 = '中国'
print type(str)   #str
str2 = u'中国'
print type(str2)  #unicode

从str到unicode为解码,从unicode到str为编码,在输出的时候,输出为unicodes时可以正常显示,这样是较为通用的一种形式。

# -*- coding:utf-8 -*-

str1 = u"你好"
print str1  # unicode正常输出
str2 = str1.encode('utf-8') # 编码为UTF-8的格式
print str2    # 乱码
str3 = str1.encode('gbk')   # 编码为GBK格式
print str3    # gbk格式正常输出

输出unicode不会乱码,windows下控制台的编码格式为gbk,所以编码为gbk格式不会出错,但编码为UTF-8和控制台gbk不符所以乱码。

# -*- coding:utf-8 -*-

str1 = "你好"
print str1  # 编码UTF-8 乱码
str2 = str1.decode('utf-8') # 解码为unicode
print str2  # unicode正常显示
str3 = str1.decode('utf-8').encode('gbk') # 编码为gbk和控制台一致正常显示

总结

文件实际编码格式和声明编码格式统一采用UTF-8,涉及到存储相关的统一转换为unicode,输出时候再转换为UTF-8或者gbk即可。

--EOF--

相关文章

  • python 编码问题总结记录

    Python2的默认编码ASCII,这是python编码问题的根本原因,可以想象,python3的编码问题肯定没有...

  • Python2和Python3的区别

    编码方式 编码 python2的默认编码是ascii,所以会导致经常会遇到编码问题文件中经常会写# coding=...

  • 学习资料

    简明python教程Python2字符编码问题小结stackoverflow about python

  • Python2编码问题

    Python2 源码编码 python2源码默认使用ascii进行编码,当源码中出现中文字符等非ascii编码的字...

  • Python2 编码问题

    一些定义 字符(character)字符是文字的最小的组成单位,其为一种抽象定义(不要与 java 或 c 中的 ...

  • python2编码问题

    由于工作的需要,用了很久的python3又转回来用Python2,所以编码问题又摆在了面前。先看一下python2...

  • Python2 编码问题

    python使用unicode作为中间编码 s.decode('gb2312') 表示将s以gb2312的方式解码...

  • python2 编码问题

    from future import unicode_literals import sysreload(sys)...

  • Python2编码问题

    Python2中系统默认编码是ASCII码,即使在文件中声明了coding为utf-8,在执行str(unicod...

  • python2的编码问题

    新手遇到编码问题都是很头疼的问题。 这个时候str(a)就报错了。?[0;31mUnicodeEncodeErro...

网友评论

      本文标题:python2的编码问题

      本文链接:https://www.haomeiwen.com/subject/hcjupxtx.html