String源码分析之getByte乱码
来源:互联网 发布:中国网络电视台纪实台 编辑:程序博客网 时间:2024/05/21 06:40
当我们想把字符串转化为某种类型的编码格式时,容易出现乱码;比如下面的代码,很容易造成误区,getByte里面的gbk编码到底是编码还是解码;调用这个方法前,字符串之前编码了没;怎么还原字符串等等
1.示例演示
String testStr="I love 中国"; byte[] bytes = testStr.getBytes("gbk"); String decode1=new String(bytes,"GBK"); System.out.println("decode1:"+decode1); System.out.println(Charset.defaultCharset().name());
2.分析
2.1 byte[] bytes = testStr.getBytes(“gbk”);
* 字符串对象调用getBytes方法的时候,并没有编码;
* getBytes传递的编码名称,是编码过程;
* 编码过程是指将字符串转化为字节数组
* 解码过程是指将字节数组转化为字符串
* testStr这个引用是在栈中,字符串是在常量池里面,也就是方法区,内存中字符编码默认为UTF-16
* 该方法执行之后,字符串就转化为gbk编码格式的字节流
2.2 String decode1=new String(bytes,”GBK”);
* 该过程是解码过程
* 将bytes字节流转化为字符串
* 解码使用的编码方法为GBK
* 如果此处使用UTF-8解码,就可能出现乱码
* 为什么是可能出现乱码呢,是因为如果只是ASCII码,两者是兼容的
2.3 本系统编码格式
* Charset.defaultCharset().name()用来表示本系统的编码格式
3.乱码分析
3.1 当字符超过了我们正使用的编码范围时,就会出现乱码
* 使用单字节编码对中文或非ASCII码进行编码,这样会造成信息丢失,即使使用相同的编码格式解码,也无法还原信息
* 常见的有ISO-8859-1,如果用它对中文进行编码,那么解码后就会出现?
* 编码方法与解码方式不同,且不兼容,比如使用gbk编码,然后使用utf-8解码
- String源码分析之getByte乱码
- JDK源码分析之String
- String源码分析之BeanFactory
- Java源码分析之String
- Java源码分析之String
- Java String的构造和getByte
- JDK源码分析之String篇
- JDK源码分析之String篇
- JDK源码分析之String篇
- JDK源码分析之String(一)
- Java源码分析之String类
- String源码分析
- String源码分析
- String源码分析
- String源码分析
- String源码分析
- String equals源码分析
- String源码分析
- 【图论+二分】【CQBZOJ 1635】【图论专项赛】无线通讯网
- 串口通讯
- 重新认识电脑硬件(二)-主板
- 机器学习小组知识点13:泊松分布(Poisson Distribution)
- 通过关系找节点、创建节点,插入节点,设置节点属性
- String源码分析之getByte乱码
- 【USACO题库】3.1.3 Humble Numbers丑数
- C++ Set常用用法
- 33-3-1
- 深度搜索
- 11.11后的一天开通了我的博客
- C#中对数据库的基本操作(增删改以及调用存储过程)
- markdown与各种网页的各种地方改变字号颜色的方法
- java多线程