char foo='中';是否正确

语句:char foo='中';是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)

答案:正确

这道题应该和GB2312编码关系不大吧。即使用UTF-8来存储和编译,也是正确的。(’中‘字在UTF-8中是三字节的)

我的个人看法是:这里的’中‘应该是不管用什么编码方式存储,赋值给char变量后都会先转换成对应的unicode的序号\u4e2d,(知道了项目原编码方式,以及某个字符,然后按对应规则转--见下文a)之后再用UTF-16BE来作为\u4e2d这个字符编码的存储方案。

因此,只要是utf-16be能表示的unicode编码都是可以成功的,与java文件本身的字符编码无关系。

--a:比如,’中‘在gbk中的编码是d6d0,那当赋值给char类型时,java知道这是gbk字符集下表示的’中‘,那就能通过对比gbk和unicode,找到d6d0对应的是\u4e2d.同理,utf-8的’中‘虽然是占了三个字节,但java只会直接把它转成对应的unicode编码,再转成utf16be表示,与它是几个字节无关。

Comment: 分析得很清楚。搞清楚了文件编码,utf8,gbk和内存编码,unicode的区别

https://www.nowcoder.com/test/question/done?tid=14076599&qid=3222#summary

猜你喜欢

转载自my.oschina.net/u/553266/blog/1634739