字符集(charset)与编码(encoding)区别对比
前言
字符集与编码这两个概念常被混淆,两者是有差别的。
字符集与字符集编码是两个不同层面的概念:
(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)区别对比相关推荐
- unicode字符集与utf-8编码的区别,unicode转中文工具、中文转unicode工具(汉字)
在cw上报的报警信息中,有一个name字段的值是\u4eba\u4f53 不知道是啥,查了一下,是unicode编码,用下面工具转换成汉字就是"人体" 参考文章:https://t ...
- 常用字符集及字符编码和Charset类
计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果. 字符(Character) :是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...
- 聊聊字符集与字符编码这些事儿
文章目录 ASCII 字符集 ISO 8859-1字符集 GB2312字符集 GBK字符集 Unicode字符集 UTF-32编码方式 UTF-16编码方式 UTF-8编码方式 可能有的一点疑惑 如何 ...
- 小结字符集及字符编码问题
原文转自我的个人博客--温馨咖啡小屋 字符编码问题一直深深困扰着我~无论是网页还是数据库抑或是单纯的文件字符流,总有各种奇怪的编码问题.之所以称之为奇怪其实主要还是因为我对于编码的知识了解太浅.近来深 ...
- java文件file字符集_获取文件字符集(或文件编码) 的工具类
packageorg.mozilla.intl.chardet; importjava.io.BufferedInputStream; importjava.io.File; importjava.i ...
- PHP页面编码声明与用header或meta实现PHP页面编码的区别
php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8&quo ...
- 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 普通的linux 和 普通的windows. ...
- 中文字符集与字符编码知识
中文字符集与字符编码的基础知识 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII ...
- Ansi,UTF8,Unicode,ASCII编码的区别
近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了, 下面全是从网上搜来的: 1. ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符 ...
最新文章
- 最强原创综述!当强化学习邂逅组合优化
- 区块链学习(6)区块链
- C# 系统应用之透明罩MyOpaqueLayer实现360界面阴影效果
- HTML script 标签
- Gradient-Based Learning Applied to Document Recognition 部分阅读
- python多核多线程编程实例_Python多线程
- spingMVC问题小结
- 【To Do! 重点 正则表达式】LeetCode 65. Valid Number
- VMware14虚拟机安装Ubuntu
- STM32学习——半天学完正点原子入门篇例程,STM32:学会了吗?我:学废了✨
- 武田2020财年第三季度业绩彰显增长加速和持续的韧性;确认了2020财年全年管理层指引,并上调了自由现金流以及列报每股盈利的预测
- Native Instruments Maschine 2 v2.14.7 WiN-MAC 节奏音乐制作软件含拓展
- proDAD Mercalli 2020V5.0.461注册激活码版视频稳定防抖软件
- 一文极速读懂 KEGG 数据库
- 中学计算机兴趣小组 计划,陵口中学科技兴趣小组工作计划
- 从周易六十四卦看软件架构真好懂!女朋友这下不用担心我的学习了~【程序员编程】
- android 原生控件,抽离Android原生控件的方法
- 干货分享 | 创业公司绝对不会告诉你他们在用的工具们
- dex2oat过程对系统性能的影响
- 微信小程序解码emoji表情
热门文章
- 校招真题练习035 最少立方数之和(小米)
- 练习-Java类和对象之访问限制(21)
- Capital One应用区块链协同认证系统专利
- 华硕tinkerboard 2s Android11系列-bootloader部分的编译
- 解决ubantu18.04下VS CODE空格极小的方法
- 2023最新USDT理财系统源码+代码完美流畅/框架二开/功能强大
- 怎么向心爱的女孩子表白?
- Python语言之文件操作详解(open、close、write、read、readline、readlines等)
- 2022年二级建造师建筑工程节能相关技术标准综合复习题及答案
- hbase 2.4 java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer