2019年8月7日の学習仕上げ

2019年8月7日の学習仕上げ

文字コード

1.文字エンコーディングとは何ですか

文字エンコーディングが認識できるデジタルコンピュータに人間の文字エンコーディングで、この変換は、デジタル人間の文字との対応以外の何ものでもありません標準の固定セットを、従わなければならない、文字コード表と呼ばれます。

文字エンコーディングと分類の2歴史

コンピュータは、アメリカ人によって発明された、最初の文字エンコーディングは、英語、英数字と一部の特殊文字と数字の間の対応の唯一の規定ASCIIです。256 = 2 ** 8は、従って、ASCIIコードシンボルは、256まで表現することができる。のみ(1バイト)で表すことができる、すなわち、8ビット。

046-文字エンコーディング-ASCIIテーブル.JPG?X-OSS-プロセス=スタイル/透かし

もちろん、私たちは言語、英語には問題をプログラミングされていない、十分なASCIIが、データを扱う際に、異なる国、異なる言語を持って、中国の人々は、中国に参加する、日本人は彼らのプログラムで日本に参加するだけでなく、韓国ます。

しかし、中国を表現するために、単一バイトのテーブルを取ることは、それが完成した(以上2000個の漢字を知っても、子)を発現することは不可能男であることを示している、唯一の解決策はバイト> 8はバイナリを表し使用することですあなたが中国語の文字のどこにも表現のうち、できるだけ多く得ることができるように、より多くのビット、変化をより代表、。

だから、中国の人々は独自の基準GB2312コーディングを定義し、対応が漢字や数字などの条項が含まれています。

日本人は自分のShift_JISエンコーディングを定義し、韓国はそのEUC-KRエンコーディングを定義した(また、韓国人は、彼らはコンピュータが韓国のコーディングで世界を統一する必要が考案言うが、それを無視し、世界の人々)。

046-文字エンコーディング -  X-OSS-プロセス=スタイル/透かしを.pngの文字エンコーディングの発展の歴史をまとめましたか?

唯一の規定は、18個の言語に堪能疑問が生じた。この時間は、ささやかな小さなチョウが、原因現時点では様々な規格に(文字化けする国の標準によると、8つの言語の文書なので、この文書を書いています数字と文字、解析時にのみ、国のためにエンコード形式を使用している場合、そのテキストの言語の残りの部分が文字化けします)など、自分たちの国の文字との対応。世界標準のための緊急の必要性は、(韓国が、懇願、その後は使用の卵がありません)はUnicodeに入ってきた(世界中の言語を含めることができます)があります。

バイト(8ビットバイナリ)とASCIIは一つの文字を表し、ユニコード、従来の2バイト(バイナリ16ビット)が一つの文字を表し、珍しい単語は4つのバイトを必要とします。

例:文字xは、ASCII 120小数、バイナリ01111000によって表されます。

汉字中已经超出了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

046-およびUnicode文字エンコーディング変換-utf8の.png?X-OSS-プロセス=スタイル/透かし

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モードでは、すべてのファイルをハードディスクバイナリ形式で保存されているので、ことに留意すべきである、一般的なパターンです

運用状況と文書管理

open()メソッドは、オペレーティングシステムの自動解除する方法を提供するオープンで、占め、カンマ、使い捨て開いて複数のファイルによって分離することができないだけで、高速なファイルをコピーします。

with open('32.txt', 'rb') as fr, \
        open('35r.txt', 'wb') as fw:
    f.write(f.read())

おすすめ

転載: www.cnblogs.com/zhangmingyong/p/11316974.html