zoukankan      html  css  js  c++  java
  • python之字符编码(二)

    一、字符编码的发展史

      阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII

      ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符

      ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符)

      后来为了将拉丁文也编码进了ASCII表,将最高位也占用了

      阶段二:为了满足中文,中国人定制了GBK

      GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符

      为了满足其他国家,各个国家纷纷定制了自己的编码

      日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr

      阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

      于是产生了unicode(定长), 统一用2Bytes代表一个字符, 虽然2**16-1=65535,但unicode却可以存放100w+个字符,因为unicode存放了与其他编码的映射关系,准确地说unicode并不是一种严格意义上的字符串编码表,下载pdf来查看unicode的详情:

      链接:https://pan.baidu.com/s/1dEV3RYp

      很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)

      于是产生了UTF-8(可变长),对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他生僻字用更多的字节Bytes去存

      需要强调的是:

      毫无疑问utf-8比unicode更节省空间,而且都能兼容万国,那为何不全部采用utf-8呢?

      其一:如果我们能统一全世界,废除所有现有的计算机编码体系,然后大一统都采用utf-8,那么乱码问题将不复存在,很明显很多地方仍会采用各种各样的编码,这是历史遗留问题。因而我们必须寻求一种与全世界的编码都有映射关系的解决方案,这就是unicode,而utf8是没有与其他编码的映射关系的。

      其二:内存中统一采用unicode,浪费空间来换取可以转换成任意编码(不乱码),硬盘可以采用各种编码,如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。

      UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

  • 相关阅读:
    元组类型内置方法
    列表类型内置方法
    字符串类型内置方法
    转:【英语学习材料】
    转:【15年学不会英语的原因】
    转:【Java动态编程(Javassist研究)】
    转:【进制转换-概念】
    c语言学习笔记
    virtualbox虚拟机桥接方式网络设置
    navicat连接mysql8报错,错误提示为1251,原因及解决步骤
  • 原文地址:https://www.cnblogs.com/MouseCat/p/7530613.html
Copyright © 2011-2022 走看看