• python 字符编码


    1、存取文件不乱码的法则:用什么编码存的,就要用什么编码读

    2、           decode             encode

    bytes------------->unicode---------->bytes

    3、python3解释器默认使用的字符编码是utf-8

         python2解释器默认使用的字符编码是ascii

    4、python2的str就是python3的bytes

         python2的unicode就是python3的str

    5、unicode 打印编码:

         pycharm的终端是utf8的编码,要按照打印终端的编码来显示出来.

         windows的终端是gbk的编码

         linux的终端是utf8的编码

    总结字符编码的发展可分为三个阶段:

    阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII

    ASCII一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符

    阶段二:为了满足中文和英文,中国人定制了GBK

    GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符;为了满足其他国家,各个国家纷纷定制了自己的编码,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里

    阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

    于是出现了unicode(定长), 统一用2Bytes代表一个字符, 虽然2**16-1=65535,但unicode却可以存放100w+个字符,因为unicode存放了与其他编码的映射关系,准确地说unicode并不是一种严格意义上的字符编码表。很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间,于是产生了UTF-8(可变长,全称Unicode Transformation Format),对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他生僻字用更多的Bytes去存

     

    要想保证文件不乱码,用什么编码存的就用什么编码取.
    x='上'

    python2:启动python解释器,把文件从内存读出(以默认ASCII码), bytes=str,申请内存空间存储字符串

    #coding:gbk
    print('')
    print([x]) #内存空间存的值['xc9xcf'] #(GBK),2个bytes,4个16进制数
    print([x.decode('gbk')]) #以什么编码存的就用什么编码取[u'u4e0a'](unicode) 解码
    y=x.decode('gbk') #y是Unicode类型,可以转化为任意类型
    print([y.encode('utf-8')])
    x=u''
    print(type(x)) #python2 有直接的unicode的类型,可以encode其他编码.建议都加u

    python3:启动python解释器,把文件从内存读出(以默认UTF-8码) 

    #coding:gbk 告诉python解释器以什么编码读取存储字符串
    x=''
    y=x.encode('gbk') #只能encode证明python3默认就是以unicode存.
    print(y,type(y)) # b'xc9xcf' <class 'bytes'> 
    #python3的bytes类型就是python2的str类型,所有的字符串编码都是bytes类型
    #文件编码(存)默认就是utf-8类型,字符串编码默认是unicode类型
  • 相关阅读:
    一些技术摘选及随想
    新技术学习方法如何学习一门新编程语言(Lua)?
    什么时候该用ASSERT?
    MFC是否过时?如何学习MFC?
    Windows桌面开发者的必备软件
    Comet技术选择,论Is node.js best for Comet?
    关于C/C++内存管理一些乱讲
    debug
    C语言趣味题目
    CSS之简单的双引号
  • 原文地址:https://www.cnblogs.com/snailgirl/p/8030132.html
Copyright © 2020-2023  润新知