java编码

chan10 2010-06-13 12:27:22
jdk上,
public byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列。

这个默认的字符集可以通过【System.getProperty("file.encoding")】方法查出来吗?

之前看到过文章说是,java平台的默认编码是unicode的(不是很确定),
写了下测试程序:

System.out.println(System.getProperty("file.encoding"));

1.输出gbk,不是unicode啊?


String str = "我";
System.out.println("===========默认==============");
byte[] b = str.getBytes();
for(int i=0;i<b.length;i++) {
System.out.println(b[i]);
}

System.out.println("===========Unicode==============");
byte[] b5 = str.getBytes("Unicode");
for(int i=0;i<b5.length;i++) {
System.out.println(b5[i]);
}

2.这两个的输出结果也不一致啊,或者如果默认编码是其他的话,会不会一样呢?


3.写文件的时候,

...........
txtFile = new File("3.txt");
if (txtFile.exists()) {
os = new FileOutputStream(txtFile);
osw = new OutputStreamWriter(os,"UTF-8");-----3.1
bw = new BufferedWriter(osw);
String str = "我----" + System.getProperty("line.separator") + "是一个兵";
bw.write(str);
}
...........

如果【3.txt】的文件类型是【UTF-8】的时候,【3.1】的编码格式必须是UTF-8,而不能是GBK啊,
难道这种编码格式是根据写入的文件类型来决定的?
...全文
154 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
East271536394 2010-06-15
  • 打赏
  • 举报
回复
我们在处理java的编码问题时,要分清楚三个概念:Java采用的编码:unicode,JVM平台默认字符集和外部资源的编码。

---

Java的class文件采用utf8的编码方式,JVM运行时采用utf16。

Java的字符串是unicode编码的。

总之,Java采用了unicode字符集,使之易于国际化。
Headsen 2010-06-15
  • 打赏
  • 举报
回复
首先:byte[] b = str.getBytes(); 和byte[] b = str.getBytes(“GBK”);结果是一样的!
一般的,国内的如果window中文版的话,默认GBK的。
其次:当str为英文时:一下都是相等的。即兼容的
byte[] b=a.getBytes("ISO-8859-1");
byte[] b=a.getBytes("GBK");
byte[] b=a.getBytes();
byte[] b=a.getBytes("UTF-8");
而如果汉字的话:GBK两字节表示,UTF-8三字节表示,UTF-16四字节表示。
chan10 2010-06-15
  • 打赏
  • 举报
回复
不知道LS和2#的说法有什么区别。
而且,请针对性的回答我的问题,
我已经列出来三个疑问了。
chan10 2010-06-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fei1703 的回复:]
jvm内部处理的字符集对用户是透明的。也就是你不必关系jvm在内存里是如何保存字符的。(其实是utf-16编码)。你只需关心的是你以gbk编码保存的文件,读文件的时候也一定要以gbk进行解码就行了。String.getBytes()返回的默认字符集的编码。文件中的数据是以字节的形式保存的。
[/Quote]
1.默认字符集,是指操作系统的编码吗?
2.文件的编码格式是什么,那读出,输入的Strean流的编码格式就得是什么吗(问题3)
chan10 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ivorytower 的回复:]
我们在处理java的编码问题时,要分清楚三个概念:Java采用的编码:unicode,JVM平台默认字符集和外部资源的编码。

---

Java的class文件采用utf8的编码方式,JVM运行时采用utf16。

Java的字符串是unicode编码的。

总之,Java采用了unicode字符集,使之易于国际化。
[/Quote]
貌似没有GBK编码啊,这是和操作系统有关系的?
  • 打赏
  • 举报
回复
我们在处理java的编码问题时,要分清楚三个概念:Java采用的编码:unicode,JVM平台默认字符集和外部资源的编码。

---

Java的class文件采用utf8的编码方式,JVM运行时采用utf16。

Java的字符串是unicode编码的。

总之,Java采用了unicode字符集,使之易于国际化。
dxawjatfj 2010-06-13
  • 打赏
  • 举报
回复
我觉得JAVA应该是用默认字符集将字符转换成Unicode的字符的,java显示的都是Unicode的字符,而不是使用Unicode编解码.
fei1703 2010-06-13
  • 打赏
  • 举报
回复
jvm内部处理的字符集对用户是透明的。也就是你不必关系jvm在内存里是如何保存字符的。(其实是utf-16编码)。你只需关心的是你以gbk编码保存的文件,读文件的时候也一定要以gbk进行解码就行了。String.getBytes()返回的默认字符集的编码。文件中的数据是以字节的形式保存的。
dxawjatfj 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ivorytower 的回复:]
我们在处理java的编码问题时,要分清楚三个概念:Java采用的编码:unicode,JVM平台默认字符集和外部资源的编码。
Java的class文件采用utf8的编码方式,JVM运行时采用utf16。

Java的字符串是unicode编码的。

总之,Java采用了unicode字符集,使之易于国际化。
[/Quote]

JVM默认字符集 和JVM运行时字符集是分开的?
指点一下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧