`
nanapoleon
  • 浏览: 48156 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

简单谈谈字符编码规则

阅读更多
    先吐槽一下!你妹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-程序员读物:谈谈Unicode编码.doc

    Unicode编码并非一种特定的编码方式,而是定义了一套字符集和编码规则。UTF(Unicode Transformation Format)是Unicode的实现方式,其中UTF-8是最广泛使用的,因为它具有良好的向后兼容性,并且对ASCII字符保持了...

    字符样本字符样本字符样本字符样本.zip

    在这个特定的案例中,我们有一个名为"字符样本字符样本字符样本字符样本.zip"的压缩包文件,这通常包含一系列不同的字符序列,可能包括字母和数字,用于各种目的,如字体渲染、编码测试、自然语言处理(NLP)的模型...

    基于Java实现的ASN.1 BER 和 DER 编码解码库.zip

    BER(基本编码规则)和DER(差异化编码规则)是ASN.1的两种编码方式,主要用来将ASN.1定义的数据结构转换为二进制格式,以便在网络上传输。 首先,让我们深入了解一下ASN.1。ASN.1定义了一套符号和规则来描述数据...

    计算机软件-商业源码-抛弃汉字编码库,自动生成拼音五笔的DLL.zip

    首先,我们来谈谈汉字编码。在计算机系统中,汉字需要被转化为二进制表示以便存储和处理。常见的汉字编码有GBK、GB2312、UTF-8等。GBK和GB2312是中国大陆广泛使用的简体汉字编码标准,它们基于ASCII扩展,能够覆盖大...

    utf8_gb2312.zip

    4. 使用GB2312编码规则,将码点转换为2字节的字节流。 转换过程中可能会遇到的问题包括不支持的Unicode字符、乱码问题等,因此需要适当的错误处理机制。在ESP8266有限的资源环境下,优化转换算法以减少内存和计算...

    让我们来谈谈符号 代码解码指南.zip

    3. 解码:根据编码规则,解析模块的排列,确定数据部分。 4. 验证:检查校验位以确认数据的正确性。 5. 转换:将解码后的二进制数据转换为人类可读的文本或数字。 《让我们来谈谈符号 代码解码指南》可能详细介绍了...

    谈谈为 Linux 内核写驱动的编码规范

    首先,Linux内核的编码规范强调使用Tab进行缩进,而不是空格,Tab的宽度设定为8个字符。这样做的目的是使代码在不同设置的编辑器中看起来保持一致。对于注释、文档和Kconfig文件,可以使用空格进行缩进。在编写代码...

    简单谈谈JS中的正则表达式

    通过上述介绍的基础知识,我们可以构造一些简单的正则表达式来验证特定格式的数据,如邮政编码、手机号码、年龄范围、域名和IP地址。 - 验证邮政编码:正则表达式可以设计为匹配特定格式的字符串,例如中国的邮政...

    OPED-DM PHP 编码规范-11

    **文档规则**是编码规范中的重要部分。语言标签,如`<?php ?>`,用于标识PHP代码段,应正确使用。字符串引用,可以是单引号`'`或双引号`"`,根据情况选择,双引号允许直接解析变量,而单引号则不会。目录文档,即每...

    Java编码规范及实践

    合理使用数据结构(如ArrayList和HashSet的区别)、避免不必要的对象创建、使用StringBuilder代替String进行字符串拼接,以及理解垃圾收集机制,都是提升代码性能的关键。 总之,Java编码规范及实践涵盖了从命名...

    个人开发的简单实用的伪随机加解密

    描述中提到的“网络传输汉字编码”,这可能涉及到字符编码转换的问题。在网络传输中,汉字需要被转换为特定的编码格式,如GBK、UTF-8等,以便在不同的系统间正确传递。在加密前,汉字可能先被转换成字节流,然后利用...

    Converter.rar

    4. **编码与解码**:ASCII码、Unicode等字符编码标准,需要通过进制转换将数字与字符对应起来。 其次,进制与文本字符串的转换在CTF中也十分关键。例如,将二进制数据解析为可读的文本字符串,或把文本字符串编码成...

    谈谈encodeURI和encodeURIComponent以及escape的区别与应用

    `escape()`则是一个通用编码函数,适用于非URI编码场景,但由于其编码规则,不适用于URI编码,因此在新的代码中应避免使用。理解这些差异可以帮助开发者选择合适的编码方法,以确保数据在网络传输过程中的准确性和...

    mysql.rar_mysql导出

    在MySQL中,编码设置对于正确处理不同语言和字符集的文本至关重要。MySQL支持多种字符集,如UTF-8、GBK等。在创建数据库或表时,你需要指定字符集。例如,创建一个使用UTF-8编码的数据库: ```sql CREATE DATABASE ...

    emoji插件.zip

    这涉及到字符编码(如UTF-8)和数据库字段类型的选择。例如,MySQL的“utf8mb4”字符集是专为包含四字节的Unicode字符(包括许多emoji)设计的。同时,可能需要在后端使用诸如PHP、Node.js或Python等编程语言来处理...

    易语言合并多个Excel文件

    在描述中提到的“取字符代码”可能是指在处理Excel文件过程中涉及到字符串编码的问题。在易语言中,处理字符串时可能会用到“取字符代码”命令,它用于获取字符串中每个字符的ASCII码或Unicode码值。这对于处理包含...

    常用的工具类文件

    7. **StringUtil**: 这个类可能包含了更多特定于字符串的操作,如计算字符串长度、检测子串、编码解码等。 8. **ArrayUtil**: 数组操作类,包括数组的复制、填充、查找、比较等方法。 9. **FileUtil**: 提供了文件...

Global site tag (gtag.js) - Google Analytics