stringbuilder 编码_从 String.getBytes 理解 Java 编码和解码

news/2024/7/3 13:51:07

原码,补码,反码

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

e4368c5920f187659b150298ee82be27.png

Unicode 和 UTF-8 的关系

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

3cb01ab9ee308dd3eb66dd5dbf21d2b0.png

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

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

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

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

0efe415437569ed73a731e8c816cd07a.png

上述表格简单描述了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(

http://www.niftyadmin.cn/n/4235431.html

相关文章

持久化对象在Hibernate三状态解析

在Hibernate持久化对象可以划分为三种状态,分别是瞬态(Transient),持久态(Persistent),脱管态(Detached)。持久化对象的三种状态是可以相互转化的。本文向大家介绍Hibernate持久化对象,可能好多人还不了解Hibernate持久化对象&…

学无止境·MySQL⑤(存储函数、存储过程)

存储函数和存储过程试题 试题一1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch()2、创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资,功能查询emp表dept为30&#xff…

(转)hibernate 二级缓存配置

在applicationContext.xml文件中添加以下代码&#xff1a; <prop key"hibernate.cache.use_second_level_cache">true</prop> <!--设置缓存机制为二级缓存 --> <prop key"hibernate.cache.use_query_cache">true</prop> …

类似layui的前端框架_浅谈SSM+接口自动化框架结合搭建测试数据平台

一、搭建SSM框架网上有很多这方面的帖子供大家参考&#xff0c;我挑了几篇供大家参考&#xff0c;有兴趣的可以了解下&#xff1a;https://www.jianshu.com/p/fdf1c2ddf201http://www.uml.org.cn/j2ee/201904192.asp二、搭建接口自动化框架所用的框架是javatestngmaven&#xf…

(转)blob和text区别

&#xff08;mysql 是没有clob的&#xff09; &#xff08;大多数方面&#xff0c;可以将BLOB列视为能够足够大的VARBINARY列。同样&#xff0c;可以将TEXT列视为VARCHAR列。&#xff09; text分为4种类型&#xff1a;TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT&#xff0c;分别对应…

ubuntu 下mysql 命令操作

常见命令&#xff1a; show databases;显示所有库use pdns;选择pdns库show tables;查看库下所有表名select * from domains;查询domians表下的内容drop table domains;删除domains表drop database pdns;删除domain库create table pdns;建一个pdns库mysql -uroot -proot pdns &l…

mysql数据库垃圾分类_垃圾分类小程序的展示:(微信小程序+react后台管理+node后台写接口+mysql数据库)...

微信小程序&#xff1a;功能介绍&#xff1a;1.首页 2.查找 3.小知识知识 4.我的 5.登录 6.注册 7.浏览历史 8.问题反馈(需要登录后反馈)9.退出展示&#xff1a;1.首页2.查找3.小知识知识4.我的5.注册6.登录7.浏览历史8.清除缓存9.问题反馈(需要登录后反馈)10.退出Reac…

spring 不能生成抽象类

抽象类不能生成实例对象&#xff0c;spring无法注入 因为spring的原理是启动服务器时读取配置文件&#xff0c;取得类名后利用反射机制在spring上下文中生成一个单例的对象&#xff0c;由spring注入属性并维护此对象的状态&#xff0c;抽象类在反射生成对象时就已经失败了&…