先吐槽一下!你妹java核心技术卷2第八版,说是在卷一12章有字符编码的教程,书没买,那就下呗,找了半天下了个卷一,一看,12章哪来的字符编码???网上找了下,也没有改良utf-8的信息!好吧,最后,抱着试一试的心态,下了个卷一第七版,果然啊,在这里头,不带这样的吧。。。没事搞什么穿越啊。。。以上各位亲如果有兴趣,可以了解一下,各种坑啊,别和我一样悲剧找半天。
好!今天呢,就给大家科普一下!讲得好,有钱的捧个钱场!没钱的转发一下!- -
在很早以前,大家知道有一个叫ASCII码的东西,他使用7位表达128种字符,英语,当然没有问题,但是,不支持我们的汉字肿么可以,于是,我们的领导表示了强烈的不满并深感遗憾。又于是,科学家们就开发出了unicode,没错,多一字节嘛,就能很轻松的兼容问题了啊。但是,科学家们表示,那我如果经常使用英语,高字节的经常性全0会白白浪费了一倍的资源,这样是不可取的,领导于是说,你要再这样说,我就,深感遗憾。
科学家嘛,并不是都是木讷的,怎么能让领导遗憾呢?万一哪天突然走丢了呢,是吧。于是,他呕心沥血,开发出了UTF-8编码。
UTF-8的设计有以下的多字符组序列的特质:
*单字节字符的最高有效位元永远为0。
*多字节序列中的首个字符组的几个最高有效位元决定了序列的长度。最高有效位为110的是2字节序列,而1110的是三字节序列,如此类推。
*多字节序列中其余的字节中的首两个最高有效位元为10。
如:U+00000000 – U+0000007F: 0xxxxxxx
U+00000080 – U+000007FF: 110xxxxx 10xxxxxx
U+00000800 – U+0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
可变长了,有木有?领导高兴了,有木有?想感谢郭嘉了,有木有?
其实呢,在java内部,是使用UTF-16的形式存储字符的,这样是很简单的。
但是呢,根据上节所说,在jni下面,有两种编码:“改良的UTF-8”和UTF16。UTF16就是双字节的unicode很好懂了,不需要解释。
那改良的UTF-8呢?根据该死的第七版的卷一12章所说,我们在需要向文件写数据时,会使用DataOutput的方法,如writeInt,会写入一个4字节的二进制数。不过,其中有一个方法writeUTF,比较特殊,此方法使用“改良的UTF-8”来写入字符串数据,与标准的UTF-8不同,字符组成的字符串先用UTF-16表示,随后的结果采用UTF-8规则编码。对于高于0xffff的字符来说,改进的编码是不同的。这是为了能够同Unicode代码还没有增长到16位时的虚拟机向后兼容。
由于没有人使用改进的UTF-8代码,所以只能使用writeUTF方法来写字符串以供给java虚拟机使用,例如,要写一个产生字节码的程序。使用writeChars方法用于其他目的。
ok,插曲完毕,后面的文章,会继续jni的内容。
分享到:
相关推荐
字符编码是一种规则,它将字符(如字母、数字、标点符号等)与特定的数字序列(通常是二进制形式)关联起来,以便计算机能够存储、处理和传输这些字符。最基础的字符编码是ASCII编码,它定义了7位二进制表示的128个...
ASCII编码是最简单的,只包含英文字符,而Unicode则包含了世界上大多数语言的字符集,其中UTF-8是目前最广泛使用的编码方式,它能兼容ASCII并支持多种语言。 在存储图片缓存时,通常我们会遇到URL的问题。URL(统一...
Unicode编码并非一种特定的编码方式,而是定义了一套字符集和编码规则。UTF(Unicode Transformation Format)是Unicode的实现方式,其中UTF-8是最广泛使用的,因为它具有良好的向后兼容性,并且对ASCII字符保持了...
在这个特定的案例中,我们有一个名为"字符样本字符样本字符样本字符样本.zip"的压缩包文件,这通常包含一系列不同的字符序列,可能包括字母和数字,用于各种目的,如字体渲染、编码测试、自然语言处理(NLP)的模型...
BER(基本编码规则)和DER(差异化编码规则)是ASN.1的两种编码方式,主要用来将ASN.1定义的数据结构转换为二进制格式,以便在网络上传输。 首先,让我们深入了解一下ASN.1。ASN.1定义了一套符号和规则来描述数据...
首先,我们来谈谈汉字编码。在计算机系统中,汉字需要被转化为二进制表示以便存储和处理。常见的汉字编码有GBK、GB2312、UTF-8等。GBK和GB2312是中国大陆广泛使用的简体汉字编码标准,它们基于ASCII扩展,能够覆盖大...
4. 使用GB2312编码规则,将码点转换为2字节的字节流。 转换过程中可能会遇到的问题包括不支持的Unicode字符、乱码问题等,因此需要适当的错误处理机制。在ESP8266有限的资源环境下,优化转换算法以减少内存和计算...
3. 解码:根据编码规则,解析模块的排列,确定数据部分。 4. 验证:检查校验位以确认数据的正确性。 5. 转换:将解码后的二进制数据转换为人类可读的文本或数字。 《让我们来谈谈符号 代码解码指南》可能详细介绍了...
首先,Linux内核的编码规范强调使用Tab进行缩进,而不是空格,Tab的宽度设定为8个字符。这样做的目的是使代码在不同设置的编辑器中看起来保持一致。对于注释、文档和Kconfig文件,可以使用空格进行缩进。在编写代码...
通过上述介绍的基础知识,我们可以构造一些简单的正则表达式来验证特定格式的数据,如邮政编码、手机号码、年龄范围、域名和IP地址。 - 验证邮政编码:正则表达式可以设计为匹配特定格式的字符串,例如中国的邮政...
**文档规则**是编码规范中的重要部分。语言标签,如`<?php ?>`,用于标识PHP代码段,应正确使用。字符串引用,可以是单引号`'`或双引号`"`,根据情况选择,双引号允许直接解析变量,而单引号则不会。目录文档,即每...
合理使用数据结构(如ArrayList和HashSet的区别)、避免不必要的对象创建、使用StringBuilder代替String进行字符串拼接,以及理解垃圾收集机制,都是提升代码性能的关键。 总之,Java编码规范及实践涵盖了从命名...
描述中提到的“网络传输汉字编码”,这可能涉及到字符编码转换的问题。在网络传输中,汉字需要被转换为特定的编码格式,如GBK、UTF-8等,以便在不同的系统间正确传递。在加密前,汉字可能先被转换成字节流,然后利用...
4. **编码与解码**:ASCII码、Unicode等字符编码标准,需要通过进制转换将数字与字符对应起来。 其次,进制与文本字符串的转换在CTF中也十分关键。例如,将二进制数据解析为可读的文本字符串,或把文本字符串编码成...
`escape()`则是一个通用编码函数,适用于非URI编码场景,但由于其编码规则,不适用于URI编码,因此在新的代码中应避免使用。理解这些差异可以帮助开发者选择合适的编码方法,以确保数据在网络传输过程中的准确性和...
在MySQL中,编码设置对于正确处理不同语言和字符集的文本至关重要。MySQL支持多种字符集,如UTF-8、GBK等。在创建数据库或表时,你需要指定字符集。例如,创建一个使用UTF-8编码的数据库: ```sql CREATE DATABASE ...
这涉及到字符编码(如UTF-8)和数据库字段类型的选择。例如,MySQL的“utf8mb4”字符集是专为包含四字节的Unicode字符(包括许多emoji)设计的。同时,可能需要在后端使用诸如PHP、Node.js或Python等编程语言来处理...
在描述中提到的“取字符代码”可能是指在处理Excel文件过程中涉及到字符串编码的问题。在易语言中,处理字符串时可能会用到“取字符代码”命令,它用于获取字符串中每个字符的ASCII码或Unicode码值。这对于处理包含...
7. **StringUtil**: 这个类可能包含了更多特定于字符串的操作,如计算字符串长度、检测子串、编码解码等。 8. **ArrayUtil**: 数组操作类,包括数组的复制、填充、查找、比较等方法。 9. **FileUtil**: 提供了文件...