Java编码学习
来源:互联网 发布:英雄无敌3mac随机地图 编辑:程序博客网 时间:2024/06/09 17:27
<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);"><span style="font-size:14px;">参考文章:http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/</span></span>
前提:
- Java使用Unicode字符集编码,即utf-16。
- Java中一个char是两个字节
- 编码:从字符转换为字节,从char[ ]到byte[ ]
- 解码:从字节转换为字符,从byte[ ]到char[ ]
- Java中进行编码和解码时使用的是Charset类,该类中CharsetEncoder的Encode方法实现编码,decode实现解码
- Java中需要编码解码的情况:
- I/O操作
- String到内存
- Java web(有待进一步学习)
String到内存——重点:getBytes( )方法
import java.io.IOException;import java.io.StringReader;public class EncodeCompare {public static void main(String[] args) throws IOException {char a = '中';System.out.println("this is from char:");System.out.println((int)a);System.out.println(Integer.toHexString(a));StringReader strReader = new StringReader("中");int b = strReader.read();System.out.println("this is from reader:");System.out.println(b);System.out.println(Integer.toHexString(b));String c = "中";byte[] result = c.getBytes("gb2312");System.out.println("this is from string:");for(int i = 0; i < result.length; i ++)System.out.println(result[i]);}}实际输出:
this is from char:200134e2dthis is from reader:200134e2dthis is from string:-42-48
最后字符串获取字节数组的过程在内存中经历了哪几个阶段呢?
- 在内存中加载程序:此阶段,字符按照Java的编码方式,在内存中表示为0x4e2d,占用了两个字节
- 编码转换:查找gb2312里,char到byte的码表,得到与0x4e2d对应的字节,结果为0xd6d0
- 将得到的结果赋给byte数组
程序的第一段,验证了char字符是按照utf-16的编码进行编码,因为对字符串按“utf-16”获得字节数组,得到的结果是0x4e2d;
程序的第二段,是为了检验,字符流中的read方法返回的int值是怎么得来的,通过对比结果可以得出,int值是该字符按utf-16得到的字节的十进制值。
0 0
- Java编码学习
- JAVA编码学习--想
- java 学习字符编码
- java的编码--学习笔记
- Java控制台五子棋编码学习
- Java学习之编码解码
- 天天编码java学习网站
- JAVA学习总结-Java编码规范
- 乱码编码问题学习小结(包括Java)
- java学习录之huffman编码
- java 之 编码实现Filter学习示例
- java web 学习笔记 编码问题总结
- java 之 编码实现Filter学习示例
- java web编码的学习总结
- 关于java字符的编码问题学习
- Java学习中遇到的编码问题
- 学习总结——JAVA的编码
- 【编码】字符集与编码意义与关系、java编程编码问题相关学习笔记
- ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
- 用Idea建立Struts2工程
- Symantec SEP如何管理已存在的客户端
- vim使用小技巧
- 求1~50间的素数(利用带标号的break语句使其终止)
- Java编码学习
- java中静态方法和实例方法的区别
- 算法——深度优先搜索(DFS)和广度优先搜索(BFS)
- 关于esayui和css的使用
- Service的生命周期
- Xcode开发技巧之Code Snippets Library
- KBps和Kbps的区别
- java异常,java.lang.IllegalStateException,在进行JasperReports导出报表的时候出现的异常
- Android APP增量升级的实现方式