`
hongjn
  • 浏览: 56592 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

java 字符编码深入理解

阅读更多

 

相关概念:
1.Java中的字符串String由字符(char)序列表示,他实现了“字符序列”接口CharSequence。
在Java中,char类型由UTF-16描述一个代码单元。
(引用Core Java第八版:In Java, the char type describes a code unit in the UTF-16 encoding.)
这里所说的Java中,说的是编译完的class文件,并非Java源代码文件,事实上,Java源代码文件的字符集格式是由我们自己定义的,比如GBK,UTF-8等。
2.在Java中字符类型由“代码单元”表示(code unit),其中又涉及到“代码点”的概念,即对应unicode中的字符编码。
我们在用String的length()方法得到字符串长度的时候,其实得到的时候代码单元的个数,如果字符串当中包含“辅助字符”,得到的length长度可能就不是我们想象中的那样了,这点很重要。要得到真正的长度,其实应该用codePointCount()方法!
3.bmp维基百科中是这么描述BMP的:基本多語言平面內定義的符號(Basic Multilingual Plane, BMP)
4.同时还有"辅助平面"的概念
:关于bmp和辅助平面,这些概念比较抽象,也是看了好几遍的维基百科才明白的。
我的最简单理解是:编码在0-65535之间的字符属于bmp,大于65535的就属于辅助平面
5.bom(byte order mark),为了区分大小尾序,UTF-16LE以FF FE代表,UTF-16BE以FE FF代表(其中U+FEFF字符在UNICODE中代表的意義是ZERO WIDTH NO-BREAK SPACE,顧名思義,它是個沒有寬度也沒有断字的空白)

关于UTF-16编码(没有包含涉及到的UTF-16LE和UTF-16BE,即大小尾序)
1)在基本多语言平面内(bmp)的字符由一个代码单元组成,也就是说包含俩字节
2)在辅助平面内的字符,由俩代码单元组成,也就是包含四个字节(这些字符很少用到)

另外:65535对应的十六进制数字为0xFFFF,他起到分界线的作用,很重要的数字。
由于UNICODE编码范围最大为0x10FFFF,因此得到辅助平面的范围:0x10000~0x10FFFF
3)UTF-16编码的算法
a.编码在0到65535之间,也就是属于bmp的字符,直接才用本身的俩字节来表示
b.编码大于65535的,也就是辅助字符范围内的算法比较麻烦一点。
先有两个重要的数字0xD800(二进制:1101100000000000)和0xDC00(二进制:1101110000000000)
取字符的编码前十位和0xD800进行or位运算,后十位和0xDC00进行or位运算,得到的32位的四个字节就是该字符的编码了。

参考:





1
1
分享到:
评论

相关推荐

    java字符串的各种编码转换

    尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现它们之间的转换。 #### 1. US-ASCII (美国标准信息交换码) - **定义**:US-ASCII是一...

    Java字符集编码简记

    本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,探讨在实际开发中如何运用和处理字符编码问题。 首先,我们需要理解字符集的概念。字符集是一系列符号的集合,例如...

    java_字符编码 Javajava_字符编码问题

    在深入探讨 Java 字符编码的问题之前,我们先来了解一下字符编码的基本概念。字符编码是计算机内部表示字符的一种方式,它涉及到如何将人类可读的文字转换为二进制形式以便计算机处理。 #### 二、Java中的字符串与...

    Java字符集和编码

    在探讨Java字符集和编码之前,我们先了解一下为什么在Java编程中需要关注字符集和编码。Java作为一种广泛应用的编程语言,其内部采用的是Unicode编码,这使得Java能够很好地支持全球化的应用开发。然而,在实际的...

    JAVA_字符编码

    本教程将深入探讨Java中的字符编码,以及它们在实际开发中的应用。 首先,我们需要理解什么是字符编码。字符编码是将字符与数字(通常为整数)关联起来的方式,使得计算机可以识别和处理这些字符。在Java中,字符由...

    JAVA 转换字符编码工具

    本篇将围绕"JAVA 转换字符编码工具"这个主题,深入探讨字符编码的概念、Java中的字符编码API以及`ReadFile.java`这个可能的源码文件如何处理字符编码。 首先,我们需要理解字符编码的基本概念。常见的字符编码有...

    java字符编码问题

    ### Java字符编码问题详解 #### 一、引言 在Java开发过程中,字符编码问题是一个常见且容易引发各种隐藏问题的领域。不正确的字符编码处理可能...希望本文能帮助读者更好地理解Java字符编码的相关概念和技术细节。

    Java字符编码及获取文件编码

    本篇文章将深入探讨Java中的字符编码以及如何获取文件的编码。 首先,我们了解基本的字符编码体系,如ASCII、ISO-8859-1和Unicode。ASCII是最基础的7位编码,可表示128个不同的字符,主要针对英语字符。ISO-8859-1...

    java字符集编码问题

    ### Java字符集编码问题详解 #### 一、引言 在Java编程中,字符集编码问题是一个常见且重要的议题。由于不同的系统、平台以及网络环境中可能存在多种字符编码格式,这导致了在处理文本数据时可能会遇到编码不一致...

    java字符编码解析.zip

    Java字符编码解析是一个重要的主题,尤其对于移动开发,如Android平台,因为良好的字符处理能力是构建国际化应用的基础。本文将深入探讨Java中的字符编码概念、常见的编码格式、以及如何在Java程序中正确处理字符...

    Java字符编码知识简介[参考].pdf

    学习更多关于Java字符编码的知识,可以查阅相关的书籍、技术文档和在线资源,以深入理解字符编码的工作原理以及如何在Java中正确处理它们。 了解和掌握字符编码对于编写健壮的、跨平台的Java应用至关重要。在实际...

    字符编码过滤器 字符编码转换 post字符转换

    本文将深入探讨"字符编码过滤器"、"J2EE字符编码"、"字符编码转换"以及"POST字符转换"这些关键知识点,并结合提供的文件"encoding-filter.jar"和"使用方法.txt"来解释它们的应用。 首先,字符编码是计算机存储和...

    JAVA及相关字符集编码问题

    在深入探讨JAVA与字符集编码问题之前,我们首先需要理解不同字符集编码的基本概念以及它们在JAVA环境中的应用。字符集编码是计算机系统中表示文字的一种方式,它决定了如何将字符转换为二进制数据,以便于存储和传输...

    深入分析 Java 中的中文编码问题

    首先,我们要了解字符编码的基本概念。字符编码是用来表示文本的规则,比如ASCII、GB2312、GBK、UTF-8等。在中文环境下,最常用的是GBK和UTF-8编码。GBK是基于GB2312扩展的,包含了更多的汉字,而UTF-8是一种多字节...

    java字符串编码获取

    要获取Java字符串的字节序列(即编码),可以使用`getBytes()`方法。此方法默认使用平台的默认编码,通常为UTF-8,但也可以指定其他编码,如`getBytes("GBK")`。如果需要确定字符串的原始编码,需要额外的信息,...

    java 写的字符编码转换工具(附带源码)

    Java字符编码转换工具是编程中常见的一种实用程序,主要用于处理不同字符编码间的转换问题。在计算机世界里,字符编码是用来表示文本的各种方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式适用于不同的场景,...

    JAVA里字符编码的探索与理解.txt

    ### JAVA里字符编码的探索与理解 #### 一、引言 在计算机科学领域,字符编码是将人类可读的文本转换...通过本篇文章的学习,希望读者能够更加深入地理解JAVA中的字符编码机制,并能够在实际开发中灵活运用这些知识。

Global site tag (gtag.js) - Google Analytics