[问题] java 执行时的 unicode转换问题

楼主: tas72732002 (葱头)   2015-06-20 10:48:50
"java在执行的时候所有的字符都是被转成unicode, 包含编译后的.class档案", 请问一下java在读取与写入的时候他的编码是如何转换的?
读取部分 :
假设这时我使用FileInputStream来读取一个utf-8的档案,
FileInputStream f = new FileInputStream("d:\test.txt");
while((length = stream.read(buffer, 0, 1024)) != -1) {
String str = new String(buffer, 0, length);
}
这时我印出length, 他所显示中文字符是占用了3个byte(length = 3)代表是UTF-8不是unicode, JVM什么时候会将他转成unicode呢? 不是说字符都是unicode处理吗?
写入部分 :
OutputStream os = new FileOutputStream("d:\\one.txt", true);
String str = "hello world 测试\r\n";
byte[] buffer = str.getBytes();
os.write(buffer);
os.close();
这时系统自动产生的档案是UTF-8格式, 网络上说会以作业系统的默认编码的格式, 写入的内容当然也是UTF-8编码, 这部分不太确定~
我想请问写入时strm 会先经过JVM将str以 unicode编码 再转成 UTF-8输出吗?
如果上面有错误的地方再麻烦各位修正
作者: LPH66 (-6.2598534e+18f)   2015-06-20 14:20:00
char 跟 byte 的差别, 在 byte 时就是原始编码, 转成 char就永远是 unicode, 有一些函式可以做转换String 物件也是 unicode, 底层是 char所以转成 String 物件那一刻就转换了而 getBytes() 出来是 byte, 所以转回来就是在这里转

Links booklink

Contact Us: admin [ a t ] ucptt.com