GB2312何时能够代替UTF-8?

编码如果我们只认识UTF-8和GB2312就显得格局太小了,甚至于有非常多人不了解它们是什么,又代表了怎样的含义,所以才提出GB2312何时能够代替UTF-8的问题。

众所周知目前的机器仅能识别“0”和“1”,也就是说机器只能够处理数字,想要处理文本,就必须先把文本转换为数字机器才能处理。举个例子:字母“A”是一个字符,在ASCII码中十进制数“65”就表示字符“A”,用二进制数表示就是“0100 0001”。这时我们就能很好地理解编码了,编码表非常像一本字典,只有它的存在二进制数、十进制数、字符之间才能相互转换,像极了一本密码本,只有拥有这本密码本才能相互解密,要不看着就是乱码。

最早出现的编码是ASCII,因为计算机最早是由美国人发明的,所以ASCII里最早只有127个字符被编码到计算机里,包括了大小写英文字母、数字和一些符号。

如果全世界的人都使用英文那么编码后面就不会发生那么多事了,26个字母大小写也就是52个,数字0^9,再加上标点符号和其他一些符号,但事实并不是这样的全世界有上百种语言,所以各国都有各国的编码标准。比如中国大陆几乎所有的中文系统和软件都支持GB2312(GB就是国标的意思),它几乎满足了计算机中汉字99.75%的使用频率,但人名、古汉语等会出现罕用字,所以才出现了后来的GBK、GB18030汉字字符集。

各国的编码各顾各的就导致了乱码

过去word文档打开常常就是一堆乱码,就是编码导致的,没有识别到正确的编码显示就是乱码。

因此Unicode字符集编码就出现了,它将世界上所有语言都统一到了一套编码里面,这样就不会再出现乱码的问题了,所以操作系统和大多数编程语言就开始直接支持Unicode字符集编码。

Unicode字符集确实是解决了乱码的问题,但如果你写的文本基本都是英文的话,用Unicode编码会比ASCII编码需要多出一倍的存储空间,因为ASCII编码是1个字节,而Unicode编码通常是2个字节。比如字母“A”用ASCII编码二进制是01000001,而采用Unicode编码就是00000000 01000001,这样在存储和传输的效率上就显得特别的不划算。于是Unicode编码就演变为可变长编码的UTF-8编码,常用的英文字母被编码为1个字节,汉字通常是3个字节,而一些生僻字符则会编码成4~6个字节,这样就能节省存储资源、提高传输的效率。

综上所述

GB2312是字符中文编码的一种国家标准,而UTF-8囊括了几乎所有国家的常用字符编码,名副其实地成为了万国编码。既然有万国编码的存在,为什么GB2312又没有消失呢?这是因为我们可能还需要显示一些不同寻常、不常见的汉字,所以就不能完全才有万国编码。

要实现UTF-8编码和GB2312编码的转换必须先把UTF-8编码还原成Unicode编码,再把Unicode编码转化成GB2312编码,同样GB2312转换成UTF-8也是同样的道理。所以别再提GB2312合适能够代替UTF-8的问题了,这样会显得特别没有文化。


以上个人浅见,欢迎批评指正。

认同我的看法,请点个赞再走,感谢!

喜欢我的,请关注我,再次感谢!

(0)

相关推荐

  • 2KB: 文档乱码怎么办? 字符编码,字符集的故事

    浏览网页的时候,有时候网页会是一堆乱码,或者下载文档的时候,会发现文件名是乱码. 乱码要么是文档损坏了,软件不能正确显示.这时候我们需要重新下载或者寻求难度高的恢复操作.而有时文档乱码仅仅是因为软件( ...

  • 关于文本乱码的问题

    关于文本乱码的问题 在Windows平台下,进入DOS窗口(运行cmd),输入:chcp 可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息. 例如: 我的活动 ...

  • 帮你搞清ASCII、Unicode和UTF-8区别,拿走不谢

    首先说一下背景:由于计算机是美国人发明的,因此最早只有127个字母被编码到计算机中,也就是大小写英文字母.数字和一些符号,这个编码表称为ASCII编码. 例如:大写字母A的编码是65,小写字母z的编码 ...

  • 女朋友问我:为什么会乱码?

    前言 乱码这个东西相信大家都遇到过,今天我的女朋友三歪就火急火燎的上来找我:"亲爱的,我的idea怎么输出乱码了?" 我一顿操作就给他搞好了,但是三歪不愧是我的女朋友,好奇心跟我是 ...

  • (7条消息) 彻底解决Qt中文乱码以及汉字编码的问题(UTF

    尊重作者,支持原创,如需转载,请附上原地址:https://blog.csdn.net/libaineu2004/article/details/19245205 这篇文章有点长,内容有点多,如果时间 ...

  • UTF

    字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码.对于英文字符 ...

  • Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF

    Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF

  • 漫话:如何给女朋友解释为什么不能在 MySQL 中使用 UTF

    作者 | 漫话编程 来源 | 漫话编程(ID:mhcoding) MySQL是一种关系型数据库,这个大家肯定都不陌生,使用MySQL创建数据库的时候,大家需要指定一种编码方式. 很多时候,大家基于自己 ...

  • Windows自带cmd修改终端字符编码为UTF

    打开cmd,在提示符下输入 chcp 65001 标题栏右键,属性.字体,选择Lucida Console. 布局根据自己的喜好再设置吧. 缓冲区大小我的理解是实际能存放字符的终端范围.窗口大小顾名思 ...

  • 修改 cmd 控制台默认代码页编码的几种方法【GBK、UTF

    在程序开发中我们统一的编码是 UTF-8,这一点很重要,但是总还是会遇到许多乱码问题,乱码的原因是多方面的,但归根结底就是编码与解密标准不一致,这里暂不过多总结.这里只说明在 window 下使用控制 ...

  • (40条消息) php 判断中文 utf8,PHP 判断 UTF

    PHP 在判断简体 / 繁体中文部份,以前是可以 Big5 / GB2312 / GBK 来判断(可以使用 mb_detect_encoding()),但是 UTF-8 后,就有点麻烦了. PHP 判 ...

  • (2条消息) 字符编码的概念(UTF

    字符集为每个字符分配了一个唯一的编号,通过这个编号就能找到对应的字符.在编程过程中我们经常会使用字符,而使用字符的前提就是把字符放入内存中,毫无疑问,放入内存中的仅仅是字符的编号,而不是真正的字符实体 ...

  • Python中关于coding=utf

    写了很久的Python了,每次写之前都要在开头加上coding=utf-8,只知道是设置编码格式,但并没有太在意,今天在写socket编程时才发现编码格式的重要性. 一.关于开头coding=utf- ...