前言

字符集与编码这两个概念常被混淆,两者是有差别的。
字符集与字符集编码是两个不同层面的概念:
(1)charset 是 character set 的简写,即字符集。
(2)encoding 是 charset encoding 的简写,即字符集编码,简称编码。

与接口及接口实现的对比


从这里可以很清楚地看到,

一、编码是依赖于字符集的,就像代码中的接口实现依赖于接口一样;
二、一个字符集可以有多个编码实现,就像一个接口可以有多个实现类一样。

具体例子及规范用法

可以简单看两个例子,一个自于 html 文件,用的是 charset:

<meta http-equiv="content-type" content="text/html;charset=utf-8">

另一个来自于 xml 文件,用的是 encoding:

<?xml version="1.0" encoding="UTF-8"?>

哪一种用法更规范呢?显然是后者,它更加准确地区分了字符集与编码的概念。

注意:“charset=utf-8”容易让人误解为存在一种叫“UTF-8”的字符集,但实际上,无论是 UTF-8,UTF-16 还是 UTF-32 都是对同一种字符集的不同编码实现而已。

为什么要严格区分字符集与编码这两个概念?

在早期,字符集与编码是一对一的,但随着时间的发展,出现了一对多的情形。

字符集与编码一对一的情形

有很多的字符编码方案,一个字符集只有唯一一个编码实现,两者是一一对应的。比如 GB2312,这种情况,无论你怎么去称呼它们,比如“GB2312编码”,“GB2312字符集”,说来说去其实都是一个东西,可能它本身就没有特意去做什么区分,所以无论怎么说都不会错。

为什么一对一是一种普遍的情况呢?

我们以 GB2312 为例,GB=Guo Biao=国标=国家标准,标准出来本来就为了统一,你一个标准弄出 N 个编码实现来,你让人家用哪个呢?

字符集与编码一对多的情形

事情到了 Unicode 这里,变得不一样了,唯一的 Unicode 字符集对应了三种编码:UTF-8,UTF-16,UTF-32。如果还是这么笼统地去称呼,就很容易搞混了。

为什么 Unicode 这么特殊?

人们弄出新的字符集标准,驱动力无外乎是旧的字符集里的字符不够用了。

Unicode 的目标是统一所有的字符集,囊括所有的字符,所以字符集发展到它这里就到头了,再去整什么新的字符集就没必要也不应该了。

但如果觉得它现有的编码方案不太好呢?在不能弄出新的字符集情况下,只能在编码方面做文章了,于是就有了多个实现,这样一来传统的一一对应关系就打破了。

我们严格地区分字符集与编码两个概念,理由就在这里:
指定了编码,它所对应的字符集自然就指定了,编码才是我们最终要关心的。

Unicode 早期与现在的对比


由于历史方面的原因,你还会在不少地方看到把 Unicode 和 UTF-8 混在一块的情况,这种情况下的 Unicode 通常就是 UTF-16 或者是更早的 UCS-2 编码,在后面的篇章中我们会进一步分析。

记事本实例


我们现在说了不少 Unicode,由于各种原因,必须承认,在不同的语境下,“Unicode”这个词有着不同的含义。
它可能指:
(1)Unicode 标准
(2)Unicode 字符集
(3)Unicode 的抽象编码(编号),也即码点(code point)
(4)Unicode 的一个具体编码实现,通常即为变长的 UTF-16(16 或 32 位),又或者是更早期的定长 16 位的 UCS-2

字符集(charset)与编码(encoding)区别对比相关推荐

  1. unicode字符集与utf-8编码的区别,unicode转中文工具、中文转unicode工具(汉字)

    在cw上报的报警信息中,有一个name字段的值是\u4eba\u4f53 不知道是啥,查了一下,是unicode编码,用下面工具转换成汉字就是"人体" 参考文章:https://t ...

  2. 常用字符集及字符编码和Charset类

    计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果. 字符(Character) :是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...

  3. 聊聊字符集与字符编码这些事儿

    文章目录 ASCII 字符集 ISO 8859-1字符集 GB2312字符集 GBK字符集 Unicode字符集 UTF-32编码方式 UTF-16编码方式 UTF-8编码方式 可能有的一点疑惑 如何 ...

  4. 小结字符集及字符编码问题

    原文转自我的个人博客--温馨咖啡小屋 字符编码问题一直深深困扰着我~无论是网页还是数据库抑或是单纯的文件字符流,总有各种奇怪的编码问题.之所以称之为奇怪其实主要还是因为我对于编码的知识了解太浅.近来深 ...

  5. java文件file字符集_获取文件字符集(或文件编码) 的工具类

    packageorg.mozilla.intl.chardet; importjava.io.BufferedInputStream; importjava.io.File; importjava.i ...

  6. PHP页面编码声明与用header或meta实现PHP页面编码的区别

    php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8&quo ...

  7. 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   普通的linux 和 普通的windows.    ...

  8. 中文字符集与字符编码知识

    中文字符集与字符编码的基础知识 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII ...

  9. Ansi,UTF8,Unicode,ASCII编码的区别

    近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了, 下面全是从网上搜来的: 1.  ASCII和Ansi编码     字符内码(charcter code)指的是用来代表字符 ...

最新文章

  1. 最强原创综述!当强化学习邂逅组合优化
  2. 区块链学习(6)区块链
  3. C# 系统应用之透明罩MyOpaqueLayer实现360界面阴影效果
  4. HTML script 标签
  5. Gradient-Based Learning Applied to Document Recognition 部分阅读
  6. python多核多线程编程实例_Python多线程
  7. spingMVC问题小结
  8. 【To Do! 重点 正则表达式】LeetCode 65. Valid Number
  9. VMware14虚拟机安装Ubuntu
  10. STM32学习——半天学完正点原子入门篇例程,STM32:学会了吗?我:学废了✨
  11. 武田2020财年第三季度业绩彰显增长加速和持续的韧性;确认了2020财年全年管理层指引,并上调了自由现金流以及列报每股盈利的预测
  12. Native Instruments Maschine 2 v2.14.7 WiN-MAC 节奏音乐制作软件含拓展
  13. proDAD Mercalli 2020V5.0.461注册激活码版视频稳定防抖软件
  14. 一文极速读懂 KEGG 数据库
  15. 中学计算机兴趣小组 计划,陵口中学科技兴趣小组工作计划
  16. 从周易六十四卦看软件架构真好懂!女朋友这下不用担心我的学习了~【程序员编程】
  17. android 原生控件,抽离Android原生控件的方法
  18. 干货分享 | 创业公司绝对不会告诉你他们在用的工具们
  19. dex2oat过程对系统性能的影响
  20. 微信小程序解码emoji表情

热门文章

  1. 校招真题练习035 最少立方数之和(小米)
  2. 练习-Java类和对象之访问限制(21)
  3. Capital One应用区块链协同认证系统专利
  4. 华硕tinkerboard 2s Android11系列-bootloader部分的编译
  5. 解决ubantu18.04下VS CODE空格极小的方法
  6. 2023最新USDT理财系统源码+代码完美流畅/框架二开/功能强大
  7. 怎么向心爱的女孩子表白?
  8. Python语言之文件操作详解(open、close、write、read、readline、readlines等)
  9. 2022年二级建造师建筑工程节能相关技术标准综合复习题及答案
  10. hbase 2.4 java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer