2019년 8월 7일 학습 마무리
문자 인코딩
1. 문자 인코딩은 무엇입니까
문자 인코딩이 인식 할 수있는 디지털 컴퓨터에 인간의 문자 인코딩입니다,이 변환은 디지털 인간의 문자 사이의 대응에 지나지 않는다 표준의 고정 세트를 따라야합니다, 문자 코드 표했다.
문자 인코딩 및 분류 2. 역사
컴퓨터가 미국인에 의해 발명되었다, 첫 번째 문자 인코딩은 영어 알파벳과 일부 특수 문자와 숫자의 대응의 규정, ASCII입니다. 256 = 2 ** 8, 따라서, ASCII 코드 심볼 (256)까지 나타낼 수 단지 표현 (한 바이트) 수, 즉, 8 비트.
물론, 우리는 프로그래밍 언어되지 않습니다 영어 문제, ASCII의 충분하지만, 데이터 처리, 다른 나라 다른 언어로있을 때 중국 사람들이 중국에 가입되며, 일본은 자신의 프로그램에서 일본어뿐만 아니라 한국어에 참여합니다.
그러나 중국어를 표현하기 위해, 단일 바이트 테이블을하면, 그것은 완성 (이상 이천 한자를 알 심지어 아이를) 표현하는 것은 불가능 사람이다 쇼, 단 하나의 솔루션은 바이트> 8 바이너리를 나타냅니다 사용하는 것입니다 더 비트, 변화의 더 많은 대표, 당신은 많은 한자 갑자기 표현 나갈 수 있도록.
그래서 중국 사람들이 자신의 표준 GB2312 코딩을 정의 대응은 중국 문자와 숫자를 포함하는 조항을 포함하고 있습니다.
일본어가 자신은 Shift_JIS 인코딩을 정의, 한국어는 EUC-KR 인코딩을 정의 (또한, 한국인들은 컴퓨터가 한국 코딩으로 세계를 통일 할 필요가 발명 말하지만, 그들을 무시 세상 사람들).
유일한 규정은 18 개 언어를 유창하게 구사 문제가 발생이 시간, 겸손 작은 차우 인해 순간에 다양한 표준에 (왜곡 될 국가 표준에 따라, 8 개 언어로 문서, 그래서이 문서를 작성하다 숫자와 문자, 구문 분석 할 때 국가 만의 인코딩 형식을 사용하는 경우, 다음 텍스트의 언어의 나머지 부분이 깨진 것)을 포함하여 해당 국가의 특성 사이의 대응. 세계 표준에 대한 긴급한 필요가 (후 아무 소용 계란이없는 한국어 인정) (세계의 언어를 포함 할 수 있습니다) 다음 유니 코드로 온이 있습니다.
(16 비트 이진) 유니 종래의 2 바이트 문자 하나는, 흔히 워드가 4 바이트가 필요 나타낸다 바이트 (8 비트 이진)와 아스키 문자 하나를 나타낸다.
예 : 문자 x는, 이진 01111000 아스키 (120) 진수로 표시됩니다.
汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。
字母x,用Unicode表示二进制0000 0000 0111 1000,所以Unicode兼容ascii,也兼容万国,是世界的标准。
这时候乱码问题消失了,所有的文档我们都使用但是新问题出现了,如果我们的文档通篇都是英文,你用Unicode会比ascii耗费多一倍的空间,在存储和传输上十分的低效。
本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8(Unicode Transformation Format-8)编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 01000001 | 00000000 01000001 | 01000001 |
中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。
3.内存为什么不用UTF-8呢?
内存中还使用Unicode编码,是因为历史遗留问题造成的,但是因为现在写代码使用的都是UTF-8代码,所以以后内存中的代码都将变成UTF-8代码,并且以前遗留的各个国家的代码都将被淘汰,所以未来内存中使用的编码也将使用UTF-8编码替代Unicode编码。
4.乱码分析
首先明确概念
- 文件从内存刷到硬盘的操作简称存文件
- 文件从硬盘读到内存的操作简称读文件
乱码的两种情况:
- 乱码一:存文件时就已经乱码
存文件时,由于文件内有各个国家的文字,我们单以shiftjis去存,
本质上其他国家的文字由于在shiftjis中没有找到对应关系而导致存储失败。但当我们硬要存的时候,编辑并不会报错(难道你的编码错误,编辑器这个软件就跟着崩溃了吗???),但毫无疑问,不能存而硬存,肯定是乱存了,即存文件阶段就已经发生乱码,而当我们用shiftjis打开文件时,日文可以正常显示,而中文则乱码了。
- 乱码二:存文件时不乱码而读文件时乱码
存文件时用utf-8编码,保证兼容万国,不会乱码,而读文件时选择了错误的解码方式,比如gbk,则在读阶段发生乱码,读阶段发生乱码是可以解决的,选对正确的解码方式就ok了。
六、总结
- Unicode----->encode(编码)-------->gbk
- Unicode<--------decode(解码)<----------gbk
python2和3字符编码
1.字符编码应用之python
1.1执行python程序的三个阶段
- 阶段一:启动Python解释器
阶段二:Python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中
阶段三:读取已经加载到内存的代码(Unicode编码格式),然后执行,执行过程中可能会开辟新的内存空间,比如name="nick
文件的三种打开方式
件操作的基础模式有三种(默认的操作模式为r模式):
- r模式为read
- w模式为write
- a模式为append
文件读写内容的格式有两种(默认的读写内容的模式为b模式):
- t模式为text
- b模式为bytes
需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用
文件打开模式之r模式
r: read,只读模式,只能读不能写,文件不存在时报错。
f.read()读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。
文件打开模式之w模式
W : 읽기 전용 수, 쓰기, 다시 파일에 다음 비운 파일의 내용을 작성하는 시간이, 파일이 생성 된 후 내용이 기록 될 때 파일이 존재하지 않습니다.
모드의 파일 모드를 엽니 다
A : 당신은 추가 할 수 있습니다. 파일은 파일의 끝에 쓰기, 존재, 파일이 생성 된 후 내용이 기록 될 때 파일이 존재하지 않습니다.
바이너리 파일을 읽는 열기
모든 파일이 하드 디스크 바이너리 형태로 저장되기 때문에 B 모드, 일반적인 패턴입니다, 주목해야한다 : B 모드, 인코딩 매개 변수를 추가하지 않아야합니다, 파일을 읽고 쓸 바이너리 코딩이 더 이상 할 수 있기 때문에
운영 상황과 문서 관리
오픈 () 메소드는 오퍼레이팅 시스템의 자동 해제를위한 방법을 제공하는 오픈으로 차지 쉼표 일회용 열린 복수의 파일로 분리 될 수없는 전용으로 빠른 파일을 복사.
with open('32.txt', 'rb') as fr, \
open('35r.txt', 'wb') as fw:
f.write(f.read())