Java教程

Java字符编码、码点与代码单元

本文主要是介绍Java字符编码、码点与代码单元,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、字符编码
    • 1、Unicode
    • 2、utf-8、utf-16和utf-32区别
  • 二、码点和代码单元
    • 1、码点和代码单元
    • 2、实战理解
    • 3、遍历字符串

一、字符编码

1、Unicode

Unicode万国码国际码统一码单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

Unicode 为世界上所有字符都分配了一个唯一的数字编号,这个编号范围从 0x000000 到 0x10FFFF (十六进制),有 110 多万,每个字符都有一个唯一的 Unicode 编号,这个编号一般写成 16 进制,在前面加上 U+。例如:“马”的 Unicode 是U+9A6C。Unicode 就相当于一张表,建立了字符与编号之间的联系。

所以Unicode**本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。**因此才有了多种字符编码的存储方案,比较常见就是国际通用字符编码utf-8。

2、utf-8、utf-16和utf-32区别

UTF-32是一种定长编码,使用1个32bit的码元,其值与Unicode编码值相等

UTF-16也是一种变长编码,对于一个Unicode字符被编码成1至2个码元,每个码元为16位。在基本多语言平面内的码位UTF-16编码使用1个码元且其值与Unicode是相等的(不需要转换),但在辅助平面内的码位在UTF-16中被编码为一对16bit的码元(即32bit,4字节)

UTF-8是一种变长编码,对于一个Unicode的字符被编码成1至4个字节。Unicode编码与UTF-8的编码的对应关系:

Unicode编码UTF-8编码(二进制)
U+0000 – U+007F0xxxxxxx
U+0080 – U+07FF110xxxxx 10xxxxxx
U+0800 – U+FFFF1110xxxx 10xxxxxx 10xxxxxx
U+10000 – U+10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

一个字节的uft8表示的unicode 码范围为(0 ~0x7F)
两个字节长度的uft8 表示的unicode码范围为(0x80 ~ 0x07FF)
三个字节长度的uft8 表示的unicode码范围为(0x0800 ~ 0xFFFF)
四个字节长度的uft8 表示的unicode码范围为( 0x10000 ~ 0x10FFFF)

二、码点和代码单元

1、码点和代码单元

Java中char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元,最常用的Unicode字符使用一个代码单元就可以表示,而辅助字符则需要一对代码单元表示。

通俗理解是有些Unicode字符可以用一个char值表示,表示一个码点,一个代码单元;但另外的Unicode字符则需要两个char值来表示,即辅助字符需要用两个char值,但表示一个码点,两个代码单元。

2、实战理解

字符串中如果有一些非常规字符的话,使用charAt会导致结果不正确

public class Test {
    public static void main(String[] args) {
        String test="

	
这篇关于Java字符编码、码点与代码单元的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!