zoukankan      html  css  js  c++  java
  • 字符编码-11

    字符集(character set)

    字符集是用来表示语言符号的数字的集合

      注意这只是数字(code point),不涉及用什么方法来存储数字

    我们常见的字符集

      ASCII 字符集   

      Unicode 

      gb2312、gbk、gb18030

     字符编码和解码

    字符是以字节的方式存储和传输的

    字符编码是指把字符串用字节流表示的方法

    字符编码和解码

    我们常见的字符编码方式

    ASCII

    UTF-8

    UCS2 UCS4(UTF-16 UTF-32)

    gb2312、gbk、gb18030(Extended Unix Code-EUC)

    Python3中字符串类型的内部表示其实是UTF-16 (Unicode)

    Python2里面的字符串类型是原始的字符串

    Python3中的编码   

      从Unicode字符串编码为指定格式的字符串:bytes对象

      '你好’.encode('utf8')

    Python3中的解码

      从字符串(bytes对象)解码成字符串对象

      byteVar.decode('utf8')

    Python2中的编码:从Unicode对象编码为指定格式的字符串(string对象)

    Python2中的解码:从字节串(string对象)解码成unicode对象

    字形(glyph)和字体(font)

    要把字形显示在显示器或者打印机上,我们必须定义一个给定的字符怎么显示的方法

    一个文字的字形显示,英文叫glypy,它通过点阵或者矢量图的方式显示字体

    字体文件就是存储了一种字符编码里面所有文字到字形的集合

    显示utf8编码字符的过程

      文字以某种编码保存在文件中

      程序读取文件中的文字并且解码到Unicode

      程序调用操作系统Windows服务,按照Unicode数字码在字体文件中查找字体图像

      画到窗口上

    代码处理中文

    一个例子

    如果我们在Python代码中加入中文

    比如

    #中文

    print('abc')

    Python3解释器缺省使用utf8码来解码代码文件

    python2解释器缺省使用ascii码来解码代码文件

    声明代码文件编码方式

    告诉解释器,这个代码文件的编码方式

    #coding=utf-8

    #中文

    print ('abc')

    在代码的第一行或者第二行显示的加上一个注释# coding =utf-8指明代码文件的编码方式

    如果是其他编码方式,比如gbk等,必须正确的指明

    #coding = gbk

    也可以用这种方式

    #coding:gbk

    声明和文件具体是什编码的没有关系    代码编辑器选择文件编码方式  根据文件编码方式正确声明

    pycharm可以根据声明自动调整文件的编码方式     notepad++工具-首选项-新建 指定 utf-8(无bom)

    运行的时候解释器会根据声明解码文件

    pycharm编码如果代码中没有指明可以设置,如果已经指明,则不能设置

    代码输出中文

    输出中文

    终端里面执行下面的程序,来打印中文字符到屏幕上 

    print('中文')

    我们的输入的字符是utf8编码的

    而“中文”两个字utf8编码 ox4b8ad oxe69697

    执行时,解释器字符串内容解码为Unicode

    输出给终端设备,必须将Unicode编码为一种编码格式的字符串(根据终端的编码方式进行转化)

     解释器根据sys.stout.encoding对之进行转换

    输出到文件

    Python 2 

      文件对象没有文件的编码信息

      也包含中文字符的Unicode字符串到中文的时候,必须要显示编码

    #coding=utf-8

    a = u'我们这时候'

    print a

    fh = open('file1','w')

    fh.write(a.encode('utf8'))    字符串进行编码,底层存储是字节串

    fh.close()

    解释器执行打开代码文件 

    python3 

      文件对象包含了文件的编码信息:对文本模式打开有效

      在读写文件内容的时候,底层会以参数指定的编码方式对文件内容自动进行编码和解码

      OS平台相关 locale.getpreferredencoding()

    a = '我们这时候’

    print (a)

    print (type(a))

    fh = open('file1','w')  没有指定,缺省使用gbk

    fh.write(a)

    fh.close()

    wb以二进制方式打开

    fh = open('file1','wb')

    fh.write(a.encode('utf8')) 或者 fh.write(b'a')

    从文件读入

    Python2 需要显示解码

    #coding = utf-8

    fh = open('file1')   打开不指定

    bcStr = fh.read() #这里返回的是str类型

    uc = bcStr.decode('utf8')    类似Python3里的二进制

    print uc

    print len(uc)

    print len(bcStr)

    Python3 无需显示解码

    fh = open('file3.txt',encoding='utf8')   指定文件编码方式utf8,如果不指定,与操作系统相关,windows是gbk

    bcStr = fh.read() #这里已经解码了  Python3里的str就是unicode

    fh.close()

    print(bcStr)

    print(len(bcStr))

    print(bcStr[2])

    打开中文文件名

    windows目前最流行的ntfs文件系统而言

    文件名都是用utf-16(Unicode)编码

    with open(‘中文.txt’,encoding='utf8') as f:

      print(f.read())

    用户输入中文

    input() 用户输入中文

    它的返回是 根据操作系统和输入的终端程序而定的,在中文操作系统上,用cmd窗口输入,返回的一般是gb系列的编码

    a = raw_input(':')

    用户输入中文细节过程

    用户输入法输入中文字符(‘你们好’)

    windows 操作系统会发生3个WM_CHAR消息给当前应用

      WM_CHAR消息里面的编码是UTF-16

    应用程序根据自身的设置,进行不同的处理

      可能编码为gbk,也可能是UTF8

      比如notepad++ 设置为gbk 编码或者utf8编码

    代码文件、代码里输入输出中文是不一样的,一个是文件里一个是终端设备

    Python代码文件不指定,缺省就是utf8加载的

    程序输出到文件中,以文件打开方式来指定;不指定和操作系统相关,指定就以指定为准

    终端是自动的

  • 相关阅读:
    【题解】CodeChef
    【题解】AT1984 Wide Swap(拓扑排序)
    【题解】CF917D Stranger Trees(prufer序列+二项式反演)
    【题解】UVA
    【题解】P3980 [NOI2008]志愿者招募(费用流求线性规划)
    【题解】AT2064 Many Easy Problems(转换+NTT)
    【题解】AT1983 BBQ Hard (格路)
    【总结】不同卷积如何来搞
    【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)
    计算几何小结计算几何小结
  • 原文地址:https://www.cnblogs.com/hyzhang/p/7678488.html
Copyright © 2011-2022 走看看