理解Java中的字符编码

研究了快一周的Java中的字符编码,查阅了一些资料,算是初步有一些结果吧,现在总结如下:

首先看一下标准的JDK中的说明

String(byte[] bytes)
构造一个新的 String,方法是使用平台的默认字符集解码字节的指定数组。

String(byte[] bytes, String charsetName)
构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。

getBytes()
使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。

getBytes(String charsetName)
使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。

1. Java中的字符处理都是Unicode编码的;比如我们在代码中建立

String str1 = new String("This is a string");
String str2 = "This is a string";

其中str1和str2存储的字符都是Unicode编码.
2. 对于编码名称为encode的字符转换为Unicode的方法为:

String unicodeString = new String(source.getBytes(), "encode");

3. 对于Unicode转换为编码名称为encode的字符,其方法为:
String encodeString = new String(source.getBytes("encode"));
. 以上的操作涉及到一个默认的字符集,这个字符集跟操作系统有关。简体中文操作系统的字符编码默认为GBK。

有人可能会问,你总结上面的这些有什么用啊?怎么感觉都用不到呢?最直接的一个例子,做Bot程序的时候,从网络上爬行网页的时候,你面对的是各种字符编码的文件,为了在使用的过程中(保存或读取)不产生乱码和丢码,一个比较合适的方案就是:先将各种编码的字符转换为Unicode,然后在Java中进行处理,最后统一转换为UTF8进行储存;读取的过程与之相反。

参考资料:
JDK 5.0 中文本
http://gceclub.sun.com.cn/download/Java_Docs/html/zh_CN/api/index.html
字符,字节和编码
http://www.regexlab.com/zh/encoding.htm
java-汉字问题深入谈
http://blog.csdn.net/fgwf1/archive/2004/11/17/184368.aspx
Hello Unicode
http://www.chedong.com/tech/hello_unicode.html

One thought to “理解Java中的字符编码”

  1. 楼主:这两句是不是写反了
    2. 对于编码名称为encode的字符转换为Unicode的方法为:
    String unicodeString = new String(source.getBytes(), "encode");
    3. 对于Unicode转换为编码名称为encode的字符,其方法为:
    String encodeString = new String(source.getBytes("encode"));

发表评论

电子邮件地址不会被公开。 必填项已用*标注