博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符编码-11
阅读量:6921 次
发布时间:2019-06-27

本文共 2789 字,大约阅读时间需要 9 分钟。

字符集(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加载的

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

终端是自动的

 

转载于:https://www.cnblogs.com/hyzhang/p/7678488.html

你可能感兴趣的文章
初识 java NIO
查看>>
Java操作Redis
查看>>
java.lang.UnsupportedOperationException
查看>>
java 多字段排序
查看>>
我的友情链接
查看>>
XCode快捷键
查看>>
zookeeper错误:KeeperErrorCode = NoChildrenForEphemerals的原因
查看>>
istio-0.8 路由权重设置
查看>>
springmvc数据绑定
查看>>
安装yii2
查看>>
LVS负载均衡之session解决方案 持久连接
查看>>
在商业计算中我们要用java.math.BigDecimal
查看>>
Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连
查看>>
网络瘫痪分析处理(午饭的一个例子)
查看>>
cisco3750交换机物理端口配置IP地址
查看>>
数据库查询性能需注意几点
查看>>
6 个重构方法可帮你提升 80% 的代码质量
查看>>
[转载]JQUERY的父,子,兄弟节点查找方法
查看>>
10.23 linux任务计划cron 10.24 chkconfig工具 10.25 system
查看>>
正式教你控制win7的任务管理器显示的内容
查看>>