Discuss / Python / 【2021.1.11】笔记——关于编码的一些小结

【2021.1.11】笔记——关于编码的一些小结

Topic source

kk的二哈

#1 Created at ... [Delete] [Delete and Lock User]

由于计算机只能存储0,1数据,所以字符串这一数据类型的存储需要涉及到“编码”。又因为计算机是美国人最先发明的,所以美国人使用ascii码对26个大小写字母、数字以及一些常用字符,共127个item进行了编码(只需要一个字节)。

随着计算机的普及,不同国家的人需要在计算机上使用不同语言,所以他们也采用了不同编码对其语言进行了编写,而且这些编码还不能和acsii码冲突(兼容ascii码),例如编码汉字的`GB2312`编码,编码日文的`Shift_JIS`编码,编码韩文的`Euc-kr`编码等。

由于互联网的发展,这些只能编码特定文字的编码往往会由于不能兼容出现“乱码”等问题。于是,Unicode编码应运而生,可以对多个国家使用的文字进行统一编码(常用的为两个字节——UCS-16,如果碰到很偏僻的字符就用四个字节,因为与ascii码兼容,所以与ascii码表示相同字符时在前面补0就行)

使用Unicode编码的缺陷在于,如果待编码内容以英文为主,其编码结果会浪费大量空间,这一缺陷在内容传输时被放大。于是,可变长编码UTF-8得以出现。首先,UTF-8也是一种通用编码,其次他会根据需要编码的内容进行编码,例如数字、英文字母编码成一个字节,汉字编码成3个字节等。此外,由于UTF-8不止是兼容ASCII编码,而是完全包含ASCII编码(ascii编码中的127个字符在使用utf-8编码时结果与ascii码完全一样)

到此为止,我们知道内存中的内容一般使用unicode编码,当我们需要将该内容保存到磁盘,或进行网络传输时,该内容以utf-8进行编码。例如,服务器生成的内容为unicode编码,当该结果需要通过网络传输达到浏览器是则会使用utf-8进行编码。因此,许多网页的源代码都会有类似于`<meta charset="UTF-8" />`的内容


  • 1

Reply