String源码分析之getByte乱码
2016-11-12 16:31
309 查看
当我们想把字符串转化为某种类型的编码格式时,容易出现乱码;比如下面的代码,很容易造成误区,getByte里面的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()用来表示本系统的编码格式
* 使用单字节编码对中文或非ASCII码进行编码,这样会造成信息丢失,即使使用相同的编码格式解码,也无法还原信息
* 常见的有ISO-8859-1,如果用它对中文进行编码,那么解码后就会出现?
* 编码方法与解码方式不同,且不兼容,比如使用gbk编码,然后使用utf-8解码
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解码
相关文章推荐
- tomcat源码分析之getParameter(String)与getQueryString()
- SpringMVC源码总结(四)由StringHttpMessageConverter引出的客户端服务器端之间的乱码过程分析
- getResource(String name)用法及源码分析
- SpringMVC源码总结(四)由StringHttpMessageConverter引出的客户端服务器端之间的乱码过程分析
- tomcat源码分析之getQueryString()与getParameter(String)
- Tomcat源码分析之getParameter(String)与getQueryString()
- SpringMVC源码总结(四)由StringHttpMessageConverter引出的客户端服务器端之间的乱码过程分析
- SpringMVC源码总结(四)由StringHttpMessageConverter引出的客户端服务器端之间的乱码过程分析
- Hbase 源码分析4 - Get 流程及rpc原理
- JDK源码分析:java.lang.String
- asp.net mvc源码分析-Route的GetRouteData
- python string.py 源码分析 二:capwords
- String与byte[]字节数组中文转换乱码问题
- Hbase 源码分析四 - Get 流程及rpc原理
- Hbase 源码分析之 Get 流程及rpc原理
- 心得11--案例分析request.getparameter()方法的用法及请求乱码处理、分配器方法
- Hadoop源码分析HDFS ClientProtocol——getBlockLocations
- Hbase 源码分析之 Regionserver下的 Get 全流程
- Hbase 源码分析6 -- Regionserver上的 Get 全流程
- 心得11--案例分析request.getparameter()方法的用法及请求乱码处理、分配器方法