首页
学习
活动
专区
工具
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,清楚的把这篇文档的字节序告诉了解释器。

1.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、11110或10开头,详见后文介绍...许多Windows程序(包含记事本)会添加BOM到UTF-8编码格式的文件中(至于为什么要添加BOM,可参看后续《微软跟联通有仇?》一文)。然而,在类Unix系统中,这种作法则不被建议采用。

1.7K30
  • 今天一次把 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 中定义的变量名标识符或方法名标识符过长

    1.1K20

    Java Web中的中文编码问题分析

    ​一、为什么需要编码​ 在计算机中存储信息的最小单位是1个字节,即8bit,所以能标识的最大字符范围是0~255,而人类自然语言中例如汉语、日语要表示的符号太多,无法单纯用一个字节来完全表示,为了解决这个矛盾必须要有一个新的人类可识别的数据存储结构字符...,2个字节就是16位,所以称之为UTF-16,UTF-16表示字符非常方便,每两个字节表示一个字符,在字符串操作的时候大大简化了操作,这个也是Java以UTF-16作为内存的字符存储格式的一个很重要的原因...Unitcode使用UTF-16编码规则如下: UTF-16编码以16位无符号整数为单位,我们 ​6 - UTF-8​ UTF-16统一采用两个字节表示一个字符,虽然在表示上非常简单方便...UTF-8有以下编码规则 1.如果是1个字节,最高为(第8位)为0,则表示这是1个ASCII字符(00~7F)。可见,所有ASCII编码已经是UTF-8了。...这种出现乱码且乱码字符串长度是原编码前字符串的两倍的原因可能是采用2字节编码例如GBK、UTF-16等然后使用单字节进行解码例如ISO-8859-1导致的 ​2 - 一个汉字变成一个问号​ 例如,字符串

    11210

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

    这里 x 就表示可用的编码空间,这也就是 UTF-8 中 8 表示至少 8 位表示一个字符,同时也是以 8 位为一组实现可变字节的编码方式。...1)ASCII 是 UTF-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) 后,在使用时需要读取并存储在内存中。

    37940

    彻底弄懂 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.6K50

    从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”则是一个字最多占据...这是由于MySQL在4.1版本开始支持UTF-8编码(当时参考UTF-8草案版本为RFC 2279)时,为2003年,并且在同年9月限制了其实现的UTF-8编码的空间占用最多为3字节,而UTF-8正式形成标准化文档

    80010

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

    本文回顾ASCII标准,并介绍了Unicode和UTF-8、UTF-16方案间的关系,各自是如何存储的,最后介绍了Unicode中emoji表情的构成规则。...介绍字符编码前,先要明确概念: 码位(码点),对应编码术语中英文中的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都会有所不同,视每个语言、每个编译器的具体实现而定。

    8.4K42

    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 编码。

    99340

    文字与编码的奥秘(下)

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

    1.3K50

    Python字符编码全解析

    这里,我们主要介绍 ASCII、Unicode 和 UTF-8。 ASCII 计算机是在美国诞生的,人家用的是英语,而在英语的世界里,不过就是英文字母,数字和一些普通符号的组合而已。...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

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

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

    54420

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

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

    61831

    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.7K10

    你所不了解的字符编码

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

    1K20

    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-16、UTF-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 个字节。

    78210
    领券