作者tas72732002 (葱头)
看板java
标题[问题] java 执行时的 unicode转换问题
时间Sat Jun 20 10:48:50 2015
"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输出吗?
如果上面有错误的地方再麻烦各位修正
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.181.227
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1434768532.A.360.html
1F:推 LPH66: char 跟 byte 的差别, 在 byte 时就是原始编码, 转成 char 06/20 14:20
2F:→ LPH66: 就永远是 unicode, 有一些函式可以做转换 06/20 14:21
3F:→ LPH66: String 物件也是 unicode, 底层是 char 06/20 14:22
4F:→ LPH66: 所以转成 String 物件那一刻就转换了 06/20 14:22
5F:→ LPH66: 而 getBytes() 出来是 byte, 所以转回来就是在这里转 06/20 14:22