java gbk转utf_从 String.getBytes 理解 Java 编码和解码

原码,补码,反码

因为原码,补码,反码比较简单,我这里粘贴一个例子进行展示。

Unicode 和 UTF-8 的关系

Uincode 是一个字符集。它规定了我们使用到的字或符号的码点(code point)。码点使用 16 进制保存。

Uincode 字符集规定 一 的码点为 4E00。

Uincode 字符集规定 丁 的码点为 4E01。

计算机呢只能识别二进制的 0 和 1。而 UTF-8 指的是编码规则,规定码点怎么保存成二进制。

还有别的 Unicode 编码规则,UTF-16 和 UTF-32。

上述表格简单描述了Unicode 按 UTF-8 编码的格式。

    首先将 16 进制的码点,通过进制转换 为十进制 然后使用十进制的数字查找上述表格处于哪个范围中,得出编码规则。 然后将码点转换为 2 进制,从低位到高位替换 x 即可得到字二进制的原码 将二进制的原码转换为补码存储。

java 内存中的字符串采用的是 unicode 编码,也就是内编码。我们可以从 unicode 转变为 GBK 或 UTF-8 等其它规则。

代码验证猜想

以赵为例子讲解。

赵的码点为:8D75

16 进制的码点转换为 10 进制:36213

36213 处于 2048-65535 ,得出对应的 UTF-8 编码格式为:1110xxxx 10xxxxxx 10xxxxxx

赵的 16 进制码点 8D75 转换为二进制 1000

将二进制填充在 1110xxxx 10xxxxxx 10xxxxxx 中的 x 中,不足的补 0.

11101000 10110101 10110101。

对三个字节分别求补码为:

原码:11101000 10110101 10110101

补码:10011000 11001011 11001011

补码对应 java 中的字节数组为:{-24,-75,-75}

@Testpublic void run454() throws UnsupportedEncodingException { String str ="赵"; final byte[] bytes = str.getBytes("UTF-8"); StringBuilder stringBuilder =new StringBuilder(); for (byte aByte : bytes) { stringBuilder.append(aByte).append(
原码,补码,反码 因为原码,补码,反码比较简单,我这里粘贴一个例子进行展示。 Unicode 和 UTF-8 的关系 Uincode 是一个字符集。它规定了我们使用到的字或符号的码点(code point)。码点使用 16 进制保存。 Uincode 字符集规定 一 的码点为 4E00。 Uincode 字符集规定 丁 的码点为 4E01。 计算机呢只能识别二进制的 0 和 1。而 UTF-8 指的是编码规则,规定码点怎么保存成二进制。 还有别的 Unicode 编码规则,UTF-16 和 UTF-32。 上述表格简单描述了Unicode 按 UTF-8 编码的格式。 首先将 16 进制的码点,通过进制转换 为十进制 然后使用十进制的数字查找上述表格处于哪个范围中,得出编码规则。 然后将码点转换为 2 进制,从低位到高位替换 x 即可得到字二进制的原码 将二进制的原码转换为补码存储。 java 内存中的字符串采用的是 unicode 编码,也就是内编码。我们可以从 unicode 转变为 GBK 或 UTF-8 等其它规则。 代码验证猜想 以赵为例子讲解。 赵的码点为:8D75 16 进制的码点转换为 10 进制:36213 36213 处于 2048-65535 ,得出对应的 UTF-8 编码格式为:1110xxxx 10xxxxxx 10xxxxxx 赵的 16 进制码点 8D75 转换为二进制 1000 将二进制填充在 1110xxxx 10xxxxxx 10xxxxxx 中的 x 中,不足的补 0. 11101000 10110101 10110101。 对三个字节分别求补码为: 原码:11101000 10110101 10110101 补码:10011000 11001011 11001011 补码对应 java 中的字节数组为:{-24,-75,-75} @Testpublic void run454() throws UnsupportedEncodingException { String str ="赵"; final byte[] bytes = str.getBytes("UTF-8"); StringBuilder stringBuilder =new StringBuilder(); for (byte aByte : bytes) { stringBuilder.append(aByte).append(
经验分享 程序员 微信小程序 职场和发展