常见的字符编码有哪些?有什么区别?

这篇具有很好参考价值的文章主要介绍了常见的字符编码有哪些?有什么区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

面试回答

知识扩展

Unicode 和 UTF-8 有啥关系?

有了 UTF-8,为什么要出现 GBK

为什么会出现乱码


面试回答

就像电报只能发出“滴”和“答”声一样,计算机只认为 0 和1 两种字符,但是,人类的文字是多种多样的,如何把人类的文字转换成计算机认识的 0、1 字符呢,这个过程同样需要通过字符编码

字符编码(Character encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。

和摩尔斯电码功能类似,上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,这被称为 ASCII 码,一直沿用至今。

由于 ASCII 只有 128 个字符,虽然对于英文字符都可以表示了,但是世界上还有很多其他的文字是没办法表示的,所以需要一种更加全面的字符编码。

于是又出现了 Unicode 字符集(常见的 Unicode Transformation Format 有:UTF-7,UTF-7.5,UTF-8,UTF-16,以及 UTF-32),除此之外还有一些常用的中文编码有 GBK,GB2312,GB18030 等。

知识扩展

Unicode 和 UTF-8 有啥关系?

Unicode (中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得计算机可以用更为简单的方式来呈现和处理文字。

Unicode 备受认可,并广泛地应用于计算机软件的国际化与本地化过程。有很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java 编码语言以及现代的操作系统,都采用 Unicode 编码。

Unicode 是一套通用的字符集,包含世界上的大部分文字,也就说,Unicode 是可以表示中文的。

但是,Unicode 虽然统一了全世界字符的编码,但没有规定如何存储。

因为如果 Unicode 统一规定,每个符号就要用三个或四个字节表示,因为字符太多,只能用这么多字节才能表示完全。一旦这么规定,那么每个英文字母前都必然有二到三个字节是0,因为所有英文字母在 ASCII 中都有,都可以用一个字节表示,剩余字节位置就要补充 0,。如果这样,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。

为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即 UTF(Unicode Transformation Format)。常用的 UTF 格式与:UTF-7,UTF-7.5,UTF-8,UTF-16,以及 UTF-32。

  • UTF-8 使用一至四个字节为每个字符编码
  • UTF-16 使用二或四个字节为每个字符编码
  • UTF-32 使用四个字节为每个字符编码

所以我们可以说,UTF-8、UTF-16 等都是 Unicode 的一种实现方式。

有了 UTF-8,为什么要出现 GBK

因为 UTF-8 是 Unicode 的一种实现,所以他包含了世界上的所有文字编码,他采用的是 1-4 字节进行编码。

对于那些排在前面优先纳入的文字,可能就优先使用 1 字节、2字节存储了,对于纳入的文字,就要使用 3 字节或者 4 字节存储了。

正是因为 UTF-8 太全了,所以那些晚一些纳入的字符,在 UTF-8 中的存储所占的字节数可能就会多一些,那他的存储空间要求就会很大。

对于常用的汉字,在 UTF-8 中采用 3 字节进行编码,但是如果有一种只包含中文和 ASCII 的编码的话,就不需要使用 3 个字节,可能 2 个字节就够了。

对于大部分网站来说,基本都是只服务一个国家或者地区的,比如一个中国的网站,一般会出现简体字和繁体字以及一些英文字符,很少会出现日语或者韩文的。

也是出于这样的考虑,中国国家标准总局于 1981 年制定并实施了 GB 2312-80 编码,即中华人民共和国国家标准简体中文字符集。后来厂商微软利用 GB 2312-80 未使用的编码空间,收录 GB 13000.1-93 全部字符制定了 GBK 编码。

有了标准中文字符集,如果是一个纯中文网站,就可以采用这种编码方式,这样可以大大节省一些存储空间的。

常用的中文编码有 GBK,GB2312,GB18030 等,最常用的是 GBK。

  • GB2312(1980年):16位字符集,收录有 6763 个简体汉字,682 个符号,共 7445 个字符;
    • 优点:适用于简体中文环境,属于中国国家标准,通行于大陆,新加坡等地也使用此编码;
    • 缺点:不兼容繁体中文,其汉字集合过少
  • GBK(1995年):16位字符集,收录有 21003 个汉字,883 个符号,共 21886 个字符;
    • 优点:适用于简繁中文共存的环境,为简体 Windows 所使用,向下完全兼容 gb2312,向上支持 ISO-10646 国际标准;所有字符都可以一对一映射到 unicode 2.0 上;
    • 缺点:不属于官方标准,和 big5 之间需要转换;很多搜索引擎都不能很好地支持 GBK 汉字。
  • GB18030(2000年):32 位字符集;收录了 27484 个汉字,同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字。
    • 优点:可以收录所有你能想到的文字和符号,属于中国最新的国家标准;
    • 缺点:目前支持它的软件较少。

为什么会出现乱码

文件里面的内容归根到底都是由 0101 组成的,至于 0101 的二进制码如何转成人们可以理解的字符串,则是需要通过规定好的字符编码标准进行转换才可以。

我们把一串中文字符通过 UTF-8 进行编码传输给别人,别人拿到这串文字之后,通过 GBK 进行解码,得到的内容就会是乱码。文章来源地址https://www.toymoban.com/news/detail-652791.html

到了这里,关于常见的字符编码有哪些?有什么区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【面试精讲】Java有哪些垃圾回收器?工作原理都是什么?它们有什么区别?

    【面试精讲】Java有哪些垃圾回收器?工作原理都是什么?它们有什么区别? 目录 本文导读 一、垃圾回收器概览 Serial GC工作原理概览 Parallel GC工作原理概览 CMS回收器工作原理概览 G1回收器工作原理概览 2、选择适合的垃圾回收器 二、串行垃圾回收器(Serial GC) 工作原理 工

    2024年04月16日
    浏览(27)
  • java基础08-Java中的null和空字符串的区别是什么?

    null表示一个变量没有引用任何对象,而空字符串表示一个字符串变量引用了一个长度为0的字符串。 null:表示 一个变量没有引用任何对象 。也就是说,这个变量还 没有被分配内存 。如: 如上,str是一个String类型的变量,但目前它没有被引用任何对象,所以它的值为null。

    2024年01月22日
    浏览(31)
  • java 字符编码转换

    字符编码是将字符转换为二进制数字的过程,用于计算机的输入、输出和存储。在Java中,字符编码是使用Java编程语言中的Unicode字符集进行处理的。Unicode字符集是一个标准的字符集,它为世界上的每个字符分配了一个唯一的编号,包括拉丁字母、汉字、日语假名等等。 Java的

    2024年02月16日
    浏览(29)
  • Java开发手册中为什么不建议在for循环中使用“+“进行字符串操作

    java开发手册中对于循环体中进行字符串的拼接要求如下: 【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。 说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append操作, 最后通过 toString 方法返回

    2024年02月08日
    浏览(44)
  • 【Java】计算机如何存储字符&&常用编码介绍

    计算机存储字符型数据的本质:将字符转为对应码值,然后将码值转换为二进制,最后存到计算机中。 采用不同的编码方式,则字符对应的码值就不同。目前常见的编码方式有: ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码。 【优点】只用1个字节表

    2023年04月08日
    浏览(43)
  • java编译出现 错误:编码 UTF-8~的不可映射字符怎么解决

            当我们在写java代码时,代码中包含中文时,编译的时候可能会出现 \\\"错误:编码 UTF-8~的不可映射字符\\\"         将文本编辑器的编码改为UTF-8就行了。          因为有些计算机默认编码是ANSI,计算机无法识别其中的中文,使得中文编译出现错误, 这时候我们将文件

    2024年02月12日
    浏览(43)
  • 55从零开始学Java55之String字符串的编码

    在上一篇文章中,给大家介绍了 String字符串及其各种常用API方法 ,这些内容并没有什么特别难的地方。但因为String字符串很常用,所以我们在使用它的过程中,可能会面临各种问题, 比如”中文乱码“问题等。那么为什么中文会乱码?我们该怎么解决这个问题?今天会带大

    2024年02月06日
    浏览(32)
  • Java常见集合类区别

    List所包含的 元素可以重复 ,元素按放入的 先后顺序 来存放;Map中的key-value对是 无序 的,key不允许重复。 可以把List当作Map来看,List相当于一个key都是int类型的Map。 程序通过元素的索引(相当于通过int类型的key)来读取List集合的元素时,可以当作Map根据key来读取value。

    2023年04月26日
    浏览(72)
  • 前端常见的字符编码方案

    在前端开发中,最常见的字符编码方案是 UTF-8 。 UTF-8 是一种可变长度的 Unicode 编码方案,可以表示几乎所有的字符,并且与 ASCII 兼容。由于互联网的广泛应用和多语言的支持, UTF-8 成为了前端开发中的首选字符编码方案。 使用UTF-8编码的好处: 1. 多语言支持 :UTF-8可以表

    2024年02月08日
    浏览(73)
  • Java 超高频常见字符操作【建议收藏】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包