java编码备忘

1. "中".getBytes()返回什么?

 A:和源文件的编码有关,gbk的话返回两个字节的编码:[-42, -48],utf-8的话,返回三个字节的编码:[-28, -72, -83],

代码:

System.out.println(Arrays.toString("中".getBytes()));   

输出:

源文件为gbk编码:[-42, -48]

源文件为utf-8编码:[-28, -72, -83]

[-28, -72, -83]对应的16进制形式如下:

System.out.println(Integer.toHexString(-28));    // 输出ffffffe4

System.out.println(Integer.toHexString(-72));    // 输出ffffffb8

System.out.println(Integer.toHexString(-83));    // 输出ffffffad

对于utf-8编码的文件,在vscode里面,使用hexdump插件查看【中】这个字的内容如下:

Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   

00000000: E4 B8 AD 


2. 使用FileOutputStream.write('中')到一个文件中,到底写入了什么?写入了几个字节?

A:FileOutputStream.write()始终只写一个字节,'中'是一个字符,编码为20013,其二进制为:

System.out.println((int) '中'); // 20013

System.out.println(Integer.toBinaryString('中')); // 100111000101101

write()方法将int类型转化为byte类型,只取后面8位,刚好为48. (0x2D)

你可能感兴趣的:(java编码备忘)