首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么一个空字符串'‘在utf-16中编码为2个字节,而在utf-8或ascii中为0个字节?

在UTF-16编码中,一个空字符串''被编码为两个字节。这是因为UTF-16使用16位(2个字节)来表示每个字符,无论字符是ASCII字符还是非ASCII字符。因此,即使是空字符串,UTF-16编码仍然需要使用两个字节来表示。

然而,在UTF-8和ASCII编码中,一个空字符串''被编码为0个字节。这是因为UTF-8和ASCII编码是变长编码,它们使用不同的字节长度来表示不同的字符。在UTF-8和ASCII编码中,空字符串不需要任何字节来表示,因为它不包含任何字符。

UTF-8是一种通用的Unicode字符编码方式,它可以表示Unicode字符集中的任意字符。UTF-8使用1到4个字节来表示不同的字符,根据字符的Unicode码点范围来确定字节长度。对于ASCII字符,UTF-8使用1个字节来表示,因此空字符串在UTF-8中编码为0个字节。

总结起来,UTF-16编码中的空字符串需要2个字节来表示,而UTF-8和ASCII编码中的空字符串不需要任何字节来表示。这是因为不同的编码方式使用不同的规则来表示字符,并且字符的编码长度也不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

学点编码知识又不会死:Unicode的流言终结者和编码大揭秘

其它国家的人趁这个机会开始使用128到255范围内的编码来表达自己语言中的字符。例如,144阿拉伯人的ASCII是گ,而在俄罗斯的ASCII是ђ。...即使美国,对于未使用区域也有各种各样的利用。IBM PC就出现了“OEM 字体””扩展ASCII码”,用户提供漂亮的图形文字来绘制文本框并支持一些欧洲字符,例如英镑(£)符号。 ?...所以他们开始使用两个字节来存储字符,这被称作DBCS(双字节编码方案)。DBCS字符串操作变得很蛋疼,你应该怎么做str++str–? 这些问题成为了系统开发者的噩梦。...UTF-8,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码。这意味着1980年代写的文档用UTF-8打开一点问题都没有。...UTF-16,它是通过一个字节放置FE FF来实现的。不同字节序的文档,它会被显示成FF FE或者FE FF,清楚的把这篇文档的字节序告诉了解释器。

1K100

刨根究底字符编码之十一——UTF-8编码方式与字节序标记

满足基于ASCII、面向字节的字符处理的需要,Unicode标准定义了UTF-8编码方式。...UTF-8的码元由8位单字节组成;UTF-8,因为码元较小的缘故,Unicode码点值被映射到一个、两个、三个四个码元;换言之,UTF-8使用一个至四个8位单字节码元的序列来表示Unicode字符...而码元本身是固定长度8位单字节的,也就是说,UTF-8采用的单字节码元),比如一个字节足以容纳所有的ASCII字符,就用一个字节来存储,不必高位补0以浪费更多的字节来存储,因此英语作为国际语言的现实情况下...i)  字节FE(二进制为1111 1110)和FF(二进制为1111 1111)UTF-8编码永远不会出现(因为UTF-8编码方式,每个字节只能以0、110、1110、1111010开头,详见后文介绍...许多Windows程序(包含记事本)会添加BOM到UTF-8编码格式的文件(至于为什么要添加BOM,可参看后续《微软跟联通有仇?》一文)。然而,类Unix系统,这种作法则不被建议采用。

1.4K30

今天一次把 Unicode 和 UTF-8 说清楚

前言 日常开发过程,Unicode & UTF-8 并不是很受关注的知识,但在阅读源码文章时,出现频率很高。...是 2 个字节 4 个字节的变长编码,结合了 UTF-8 和 UTF-32 两者的特点。...如下图所示,基础平面,浅灰色的 D8 ~ DF UTF-16 代理区: —— 图片引用自维基百科 UTF-16 编码举例 到这里,UTF-16 的设计思路就说完了,下面就会解释具体的计算规则...规则 3: 除了首个字节,字符编码其余字节的前缀 10。...> 2、Java 字节字符串常量的编码: 可以看到,Class 文件字符串常量是 UTF-8 编码的,并且长度最大只支持 u2(65535 个字符),这就是 Java 定义的变量名标识符方法名标识符过长

85620

字符编码技术专题(五):前端必读的计算机字符编码知识入门

这里 x 就表示可用的编码空间,这也就是 UTF-8 8 表示至少 8 位表示一个字符,同时也是以 8 位一组实现可变字节编码方式。...1)ASCIIUTF-8一个子集,一个ASCII 字符串也是一个合法的 UTF-8 字符串。因此现存的 ASCII 数据可以不经修改即可使用。...幸而在 BMP ,从 U+D800 到 U+DFFF 是一个永远保留不做映射的段,于是 UTF-16 将辅助平面内的字符 —— 共需要 20 个 bit 表示(由 0x10FFFF - 0x100000...UTF-16 相对于 UTF-8 更容易进行随机访问和索引,是因为 UTF-16 每个字符都使用固定的2个4个字节表示,因此可以通过简单的数学运算来快速计算出每个字符的位置。...11、大端序和小端序 将字符转换为 UTF-16 UTF-32) 后,使用时需要读取并存储在内存

30640

彻底弄懂 Unicode 编码

ASCII码 在学校学 C 语言的时候,了解到一些计算机内部的机制,知道所有的信息最终都表示一个二进制的字符串,每一个二进制位有 0 和 1 两种状态,通过不同的排列组合,使用 0 和 1 就可以表示世界上所有的东西...例如,144 阿拉伯人的 ASCII是 گ,而在俄罗斯的 ASCII是 ђ。...UTF-8 UTF-8一个非常惊艳的编码方式,漂亮的实现了对 ASCII 码的向后兼容,以保证 Unicode 可以被大众接受。...UTF-16 了解 UTF-16 编码方式之前,先了解一下另外一个概念——"平面"。 在上面的介绍,提到了 Unicode 是一本很厚的字典,她将全世界所有的字符定义一个集合里。...这里有一个很巧妙的地方,基本平面内,从 U+D800 到 U+DFFF 是一个段,即这些码点不对应任何字符。因此,这个段可以用来映射辅助平面的字符。

1.3K50

从JavaScript看字符编码的前世今生!

这使得计算机程序设计编码序列的字符位置可以用一个整数来表示,整数加一即可得到下一个字符的位置,就和ASCII字符串一样简单。 UTF-32的主要缺点是每个码位使用四个字节,空间浪费较多。...Python 3.3不再使用 UTF-16,而是从ASCII/Latin-1、UCS-2和UTF-32选择给定字符串提供最紧凑表示的编码。...UTF-8就是为了解决向后兼容ASCII码而设计,Unicode前128个字符,使用与ASCII码相同的二进制值的单个字节进行编码,而且字面与ASCII码的字面一一对应,这使得原来处理ASCII字符的软件无须只须做少部分修改...Mac,默认文件就是UTF-8编码,MySQL字符编码集中有两套UTF-8编码实现:“utf8”和“utf8mb4”,其中“utf8”是一个字最多占据3字节空间的编码实现;而“utf8mb4”则是一个字最多占据...这是由于MySQL4.1版本开始支持UTF-8编码(当时参考UTF-8草案版本RFC 2279)时,2003年,并且同年9月限制了其实现的UTF-8编码的空间占用最多为3字节,而UTF-8正式形成标准化文档

71010

【拓展】谈谈字符编码:Unicode编码与emoji表情编码

本文回顾ASCII标准,并介绍了Unicode和UTF-8UTF-16方案间的关系,各自是如何存储的,最后介绍了Unicodeemoji表情的构成规则。...介绍字符编码前,先要明确概念: 码位(码点),对应编码术语中英文中的code point,指的是一个编码标准某个字符设定的数值,具有唯一性与一一对应性。...例如,UTF-8最少一个字节存储一个字符,那么code unit就是8位大小。UTF-16最少两个字节存储一个字符,那么code unit就是16位大小。...使用UTF-8编码时,大部分汉字转换后需要用三字节存储。 UTF-16 UTF-16实现方案则介于UTF-8和UTF-32之间。...掌握这些编码的通用基础知识,是后续学习各语言各平台对字符串处理规则的基础。每个语言存储字符串时采用UTF-8还是UTF-16都会有所不同,视每个语言、每个编译器的具体实现而定。

7.1K42

Windows 编程的字符编码

经常在写代码的时候需要处理宽字符,ASCII 字符,代码中看到 wchar、char 等等。一般都是处理一个方法的时候发现需要的是某字符串,然后这边有什么字符串,之后查一个转换方法。...,其实就是把每个字符作为一个具体数字 。对于 Unicode 标准,存在多种编码,例如:UTF-8 编码UTF-16 编码等等。...UTF-8 以下引用《核心编程》原文: UTF-8 将一些字符编码 1 个字节(可以说就是那些 ASCII 字符),一些字符编码 2 个字节,一些字符编码 3 个字节,一些字符编码 4 个字节...跨平台的坑 对于 wchar_t Windows 平台是 UTF-16 编码,是 2 个字节的长度。而在 Linux 上是 4 个字节的长度,GCC 编译的时候会用 UTF-32 编码。...这里边就会有一个不一致。要考虑编码转换问题。 最后 至此编程需要的编码,大致了解清楚了。Windows 编程,除非有特殊需要,否则一律使用宽字符是最好的选择。编码则选择 UTF-16 编码

94640

文字与编码的奥秘(下)

我们可以这个字符集想象一个包含字符与数字之间映射关系的表,这个表有一个名字,叫做 CodePage(码表) ,表的每一个数字叫做 CodePoint(码点) ,但是这个码点并不是最小的单元,他可能是由一个多个...而UTF-16是用2个字节4个字节来表示码点的,这将取决于码点在Unicode哪个Plane,如果码点在最基本的BMP平面,那么UTF-16将使用2个字节编码,否则将使用4个字节编码。...内码 是charString在内存存储时采用的编码方式,而 外码 则是字符文件存储,网络传输时采用的编码方式。...第一行打印出来的 3f ,表示字符 ”语“ ASCII码表没有找到对应的码点,所以编码的结果是返回了一个 ?。...第二行打印出来的 41 ,就是字符 ”A“ ASCII码表的码点,转换成十六进制后的结果。 第三行打印了三个字节,这与汉字 ”语“ UTF-8下的编码方式相符。

1.3K50

Python字符编码全解析

这里,我们主要介绍 ASCII、Unicode 和 UTF-8ASCII 计算机是美国诞生的,人家用的是英语,而在英语的世界里,不过就是英文字母,数字和一些普通符号的组合而已。...UTF-8 Unicode 看起来已经很完美了,实现了大一统。但是,Unicode 却存在一个很大的问题:资源浪费。 为什么这么说呢?...比如,大写字母「A」的二进制编码 01000001,它只需要一个字节就够了,如果 unicode 统一使用三个字节四个字节来表示字符,那「A」的二进制编码的前面几个字节就都是 0,这是很浪费存储空间的...为了解决这个问题, Unicode 的基础上,人们实现了 UTF-16, UTF-32 和 UTF-8。下面只说一下 UTF-8。...因此,我们说,UTF-8 是 Unicode 的实现方式之一,其他实现方式还包括 UTF-16(字符用两个四个字节表示)和 UTF-32(字符用四个字节表示)。

1.3K60

一文解开java字符串编码的小秘密

简介 本文中你将了解到Unicode和UTF-8,UTF-16,UTF-32的关系,同时你还会了解变种UTF-8,并且探讨一下UTF-8和变种UTF-8java的应用。 一起来看看吧。...这三种编码方式,只有UTF-8是兼容ASCII的,这也是为什么国际上UTF-8编码方式比较通用的原因(毕竟计算机技术都是西方人搞出来的)。...Unicode能够表示的字符串范围是0到10FFFF,表示U+0000到U+10FFFF。...Unicode其他平面的字符需要四个字节,其中包括不太常见的CJK字符,各种历史脚本,数学符号和表情符号(象形符号)。 下面是一个具体的UTF-8编码的例子: ?...和class文件字符串常量都是使用的变种UTF-8来表示的。

60331

你所不了解的字符编码

字符编码也称字集码,是把字符集中的字符编码指定集合某一对象(例如:比特模式、自然数序列、8 位组或者电脉冲),以便文本计算机存储和通过通信网络的传递。...编码编码格式 编码是用预先规定的方法将文字、数字其它对象编成数码,将信息、数据转换成规定的电脉冲信号。保证编码的正确性,编码要规范化、标准化,即需有标准的编码格式。...GB2312 简体中文编码表,GB2312 只是编码表,计算机通常都是用 “EUC-CN” 表示法,即在每个区位加上 0xA0 来表示。区和位分别占用一个字节。...这里有一个很巧妙的地方,基本平面内,从 U+D800 到 U+DFFF 是一个段,即这些码点不对应任何字符。因此,这个段可以用来映射辅助平面的字符。...下面我们以 “I am 君山” 这个字符串例介绍 Java 如何把它以 ISO-8859-1、GB2312、GBK、UTF-16UTF-8 编码格式进行编码的。

93320

刨根究底字符编码之零——前言

不过,计算机教材却往往浮光掠影般地草草带过,甚至连一本专门进行深入介绍的著作都找不到(对这一点我一直很困惑,为什么就没有哪位大牛对这个如此基础、重要而又如此容易让人困惑的主题写一本专著予以介绍呢)。...而在编程实践,如果不发扬死磕到底的精神将字符编码问题的来龙去脉、前世今生彻底搞清楚,那么它终将会像幽灵一样挥之不去,导致时不时地被各种与字符编码相关的“灵异”事件折磨得死去活来。...而由于正则表达式主要用于字符串查找、提取字符字符串,要想真正理解正则表达式,也离不开对字符编码的深入理解。...编码方案的面世 十)Unicode字符集概述 十一)字符编码系统(字符编码模型)的变化、字节序 十二)Unicode字符集的编码方式:码点、码元、UTF-8UTF-16、UTF-32 十三)同样存在多字节编码...,为什么UTF-8没有字节序的问题,而UTF-16、UTF-32却有?

50120

Unicode入门介绍和学习总结

# Unicode的实现方式 UTF-8 使用一至四个字节每个字符编码 UTF-16 使用二四个字节每个字符编码 UTF-32 使用四个字节每个字符编码 举个例子:Unicode规定了一个中文字符...最常见的是你会看到 Unicode 文本被编码UTF-8 UTF-16。这些都是可变长度编码分别由 8-bit 16-bit 或者 32bit 一个单元组成。...-8 有一个方便的属性,即最开始128 个字符(ASCII字符)被编码单个字节,所有的非 ASCII 字符被编码 128-255。...ASCII 字节不会出现在非 ASCII 编码点中,所以搜索以 NULL 结尾分隔符结尾的字符串是可以的。 使扩展遗留 ASCII 程序和 API 来处理 UTF-8 字符变得简单。...UTF-16 你可能遇到的另一个编码UTF-16,它使用 16-bit 字,每个字符被存储 1 个 2 个字节=16bit.和 UTF-8 一样,我们可以用二进制前缀的形式表示 UTF-16编码规则

1.6K10

Unicode入门介绍和学习总结

# Unicode的实现方式 UTF-8 使用一至四个字节每个字符编码 UTF-16 使用二四个字节每个字符编码 UTF-32 使用四个字节每个字符编码 举个例子:Unicode规定了一个中文字符...最常见的是你会看到 Unicode 文本被编码UTF-8 UTF-16。这些都是可变长度编码分别由 8-bit 16-bit 或者 32bit 一个单元组成。...-8 有一个方便的属性,即最开始128 个字符(ASCII字符)被编码单个字节,所有的非 ASCII 字符被编码 128-255。...ASCII 字节不会出现在非 ASCII 编码点中,所以搜索以 NULL 结尾分隔符结尾的字符串是可以的。 使扩展遗留 ASCII 程序和 API 来处理 UTF-8 字符变得简单。...UTF-16 你可能遇到的另一个编码UTF-16,它使用 16-bit 字,每个字符被存储 1 个 2 个字节=16bit.和 UTF-8 一样,我们可以用二进制前缀的形式表示 UTF-16编码规则

1.1K10

字符编码

以往的英文系统,内码ASCII繁体中文系统,目前常用的内码大五码(Big5)。...(2)把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节多个字节。...(2)与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节多个字节。...6.1 UTF的字节序和BOM 6.1.1 字节UTF-8字节编码单元,没有字节序的问题。UTF-16以两个字节编码单元,解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。...而实际上,非英文的环境,应该将“字节串”作为 ANSI 字符串,采用适当的编码来得到 UNICODE 字符串,有可能“多个字节”才能得到“一个字符”。

2.1K40

字符编码字符串表达式

字符编码UTF-16UTF-8 字符编码字符串表达式 背景 最近在看基本类型时,发现char类型是2个字节,也就是16bit,最多只能表达2^16的字符,显然字符是不止这么多的...字符串表达 我们前面知道了字符编码是字符对数字的映射,那么,我们要怎么表达一个字符串呢? char[] 在内存,一般通过 char 数组 来保存字符串的每个字符。...定长组合分割 数组的方式一般只能在内存中使用,我们要传输保存一个字符串,则需要转成字节流的格式。...具体的规则如下: 1)对于单字节的符号,字节的第一位设为 0,后面 7 位这个符号的 unicode 码。因此对于英语字母,UTF-8 编码ASCII 码是相同的。...比如中文通常是 2048-65535 之间,所以一个中文 UTF-8 会占用 3 个 8 位(3 字节)。而更加节约的 UTF-16 只用占用 2 个字节

72610

你说你是高工,char都没搞明白?!

计算机每八位二进制组成一个字节,它是计算机存储的最小单位。那么我们就可以用一个字节,最高用0占位就完全足够标识英文中的任何字母了,这样就可以将英文计算机中进行无压力的传播啦。...其实,我们可以定义一个char类型的数据赋值'庆','庆'使用utf-8编码后为:e5ba86,不错是三个字节,三个字节怎么赋值给只占两个字节的char类型变量呢?...所以,我们要了解一个事实就是JVM对char是使用UTF-16编码的。...使用UTF-16的好处是大部分字符都能以固定两个字节存储,但是这样的坏处就是对于英文字符存储就造成浪费,但是为了解决这个问题,Java9以后对字符串做了优化,对于字符串里面都是拉丁字母或者ASCII的字符...这个表情的码点(Unicode对应的值),使用UTF-16进行编码后看看有多少个字节,就知道为什么不能用char来存储了。 总结:本文看起来简单,其实讲的细节也是蛮多的。

58510
领券