各位看官,大家早安午安晚安呀~~~
如果您觉得这篇文章对您有帮助的话
欢迎您一键三连,小编尽全力做到更好
欢迎您分享给更多人哦
今天我们来学习:一个小的知识点—UTF-8和GBK编码的解释
1.关于bite位和进制的关系
1 个比特(bit)(0,1)就是 1 个二进制位
即一个字节(8个比特位,8个二进制位,两个16进制))
2.ASCII码
ASCII(美国信息交换标准代码)
范围:7-bit(0-127),共 128 个字符。
包含:英文大小写字母(A-Z, a-z)、数字(0-9)、标点符号(如
!@#$
)及控制字符(如\n
)。示例:
'A'
→0x41
(65)‘ a ’ => (97)
'0'
→0x31
(48)
UTF-8 与 ASCII (一共128个字符)的关系
ASCII 是 UTF-8 的子集:所有 ASCII 文本都是合法的 UTF-8 文本。
UTF-8 扩展了 ASCII:支持非 ASCII 字符(如中文),而 ASCII 无法表示这些字符。
3.UTF-8和GBK区别
特性 | UTF-8 | GBK(汉字内码扩展规范) |
---|---|---|
支持语言 | 全球所有语言(UTF-8是Unicode编码的一种) Unicode还包含UTF-16 |
主要支持中文(含繁体)、日韩部分字符 |
兼容性 | 兼容 ASCII | 不兼容 ASCII(中文字符占用 2 字节) |
字节长度 | (变长)1~4 字节(英文 1 字节,中文 3 字节) | 英文 1 字节,中文 2 字节 |
文件大小 | 中文内容比 GBK 大 | 中文内容比 UTF-8 更紧凑 |
适用范围 | 国际化场景(Web、移动应用) | 旧版中文系统、部分国内软件 GBK 专为中文设计,比 UTF-8 更紧凑但不兼容国际标准。 |
优先使用 UTF-8,仅在旧系统中考虑 GBK/Big5 等本地编码。
3.如何查看字节数组的内容?
字节数组里面每一个元素都是一个字节(8个比特位)可以是10进制,2进制,8进制,16进制都可以
举例:
这个hello,一个英文单词是一个字节
h在字节数组中是 104(10进制),68(16进制),0110 1000(8位二进制)
(1)直接打印 byte[]
byte[] bytes = "hello".getBytes(StandardCharsets.UTF_8); System.out.println(Arrays.toString(bytes));
输出:默认是10进制
[104, 101, 108, 108, 111] // 'h'=104, 'e'=101, 'l'=108, 'o'=111
这是
byte
的十进制表示。
(2)以十六进制(Hex)打印
import cn.hutool.core.util.HexUtil; byte[] bytes = "hello".getBytes(StandardCharsets.UTF_8); System.out.println(HexUtil.encodeHexStr(bytes));
输出:
68656c6c6f()
68
=h
,65
=e
,6c
=l
,6f
=o
(ASCII/UTF-8 编码)