浅谈utf8和unicode及相关

浅谈utf8和unicode及相关本文浅谈了 Unicode UTF 编码 包括 Unicode 的定义 UCS 2 与 UCS 4 编码 以及 UTF 8 UTF 16 UTF 32 的详细规则

大家好,欢迎来到IT知识分享网。

浅谈utf8和unicode及相关

一、简介

unicode、utf8等编码在开发中经常遇到,这里简单聊聊。

二、unicode

2.1 unicode定义

unicode是字符集,是一种二进制编码,为每种语言的每个字符设定统一且唯一的二进制编码,1994年正式公布。也就是指定了字符的二进制编码,但并没有指定该字符最终采用几个字节表示,unicode只是单纯的字符二进制编码。

2.2 unicode编码

unicode有ucs-2和ucs-4两种编码方式,即是:

  • ucs-2(universal character set coded in 2 octets):表示用2个字节表示字符,为最全世界最常用的63K字符编码,如:\u6c49;
  • ucs-4(universal character set coded in 4 octets):表示用4个字节表示字符;

三、utf编码

utf编码有utf-8、utf-16、utf-32三种形式,即:

  • utf8是变长编码方式,用1到4个字节表示。
  • utf16是变长编码方式,用2或4个字节表示。
  • utf32是固定使用4个字节表示。
3.1 utf-8
3.1.1 utf-8规则

utf8是变长编码方式,用1到4个字节表示,各字节数表示如下:

0xxxxxxx 110xxxxxxx 10xxxxxx 1110xxxxxxx 10xxxxxx 10xxxxxx 11110xxxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 

0开头的字节表示单独一个字符。除0开头的字节外, 其他3种,当第一个字节开头有几个1,就表示有多少个字节表示一个字符。

3.1.2 utf-8字节数

utf-8中,英文占1个字节,大多数汉字占3个字节,少数占4个字节

3.2 utf-16

utf-16是变长编码方式,用2或4个字节表示。对全世界常用的63k字符采用usc-2编码,另外用4个字节对不常用的字符编码。utf-16有三种方式: utf-16、utf-16be(big endian)、utf-16le(little endian)。这里涉及字节存储方式。

3.2.1 bom字节存储方式

字节存储方式,如ab cd,在不同存储方式如下:

big endian: 高位在前,即: ab cd little endian: 低位在前,即: cd ab 
3.2.2 utf-16与ucs-2

utf-16是usc-2的扩展,对全世界常用的63k字符采用usc-2编码,另外用4个字节对不常用的字符编码。

3.2.3 utf-16字节数

utf-16中,英文占2个字节,大多数汉字占2个字节,少数占4个字节

3.3 utf-32

utf-32是ucs-4的子集,固定使用4个字节表示。

四、java中编码

4.1 内码和外码
  • 内码(internal encoding):特定语言中,string和char在内存中的编码方式
  • 外码(external encoding):除内码外,其余都是外码
4.2 java中编码
  • jvm内码采用UTF-16,char占2个字节, 早期2字节可以表示所有字符,后期新增unicode码后,有些字符采用2个char(即4个字节)表示。
  • java的class文件采用utf-8存储,即字符占1到4个字节。java序列化采用utf-8编码。
4.3 java中输出指定编码

在java中,字符串转特定编码的byte[]数组后,可以借助BigInteger在转为特定进制(如2进制、16进制)的字符串形式。

import lombok.

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151008.html

(0)
上一篇 2025-03-15 21:26
下一篇 2025-03-15 21:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信