java 汉字 char_Java的char类型真的可以存汉字么?

针对char类型存入汉字的进一步解析及一些编码知识。疑问Java中的变量是否都是以Unicode编码存储的。

目录

谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

0、big endian和little endian

1、字符编码、内码,顺带介绍汉字编码

2、Unicode、UCS和UTF

2.1、内码和code page

3、UCS-2、UCS-4、BMP

4、UTF编码

5、UTF的字节序和BOM

6、进一步的参考资料

附录1 再说说区位码、GB2312、内码和代码页

今天偶尔看到一句话: ANSI编码表示英文字符时用一个字节,表示中文用两个字节,而unicode不管表示英文字符还是中文都是用两个字节来表示。我突然间对自己之前对java变量以Unicode编码存储产生了疑问。

Java对象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm

到底是以Unicode编码存储的还是和源文件使用的编码格式相同呢?

联想到之前的一个问题java的char类型是否可以存储汉字, 这个问题是有着肯定答案的:可以。 但是疑惑之余我还是做了个测试。

写一个简单的测试文件, 内容如下:

public class TestANSI{

public static void main(String[] args) {

char cc = '在';

System.out.println(cc);

}

}

以上文件以ANSI格式存储。使用javac TestANSI.java编译, java TestANSI运行可以看到输出了汉字  在。

将以上文件复制一份, 修改为TestUTF8, 使用Notepad++转为UTF8格式打开,再次编译运行

javac -encoding utf8 TestUTF8.java

java TestUTF8

可以看到正确输出了 汉字  在。

但是以上测试并不足以证明char型变量是以Unicode编码存储的。

我们在eclipse中编写如下测试程序:

@Test

public void testChar() throws Exception {

char c = '从';

//UTF8: 20174 GBK:20174

System.out.println(String.valueOf(c).codePointAt(0));

}

将文件格式分别设置为UTF-8和GBK可以看到输出的Unicode代码点相同。

这说明char变量确实是以Unicode编码存储的, 我们再打开java api可以看到Character和String中大量篇幅都是在说明char和String是以UTF-16来存储的。

以下是我从JDK7的源码中摘出来的一句话:

Character information is based on the Unicode Standard, version 6.0.0.

JDK6中也有这么一句, 只是版本号是4.0。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值