java汉字编码问题:常用的GBK与Unicode在JAVA是怎样规定的?

BCBPLC 2011-10-18 11:14:26
java字符编码问题:常用的GBK与Unicode汉字编码在JAVA是怎样规定的?

如果一个文本文件是GBK格式或者Uniocde编码,
如何处理。如何转换?
...全文
333 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
~诸行无常~ 2012-11-26
  • 打赏
  • 举报
回复
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
chenchenyangll 2011-10-18
  • 打赏
  • 举报
回复
编码问题很头疼 = = 学习了
qybao 2011-10-18
  • 打赏
  • 举报
回复
读取文件,可以
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("filename"), "charset")); //charset就是指定的编码,如GBK
如果是字符串转换
String s = "ABC";
String ss = new String(s.getBytes("charset"), "charset"); //charset就是指定的编码,如GBK
小绵羊 2011-10-18
  • 打赏
  • 举报
回复
附上API一段


public class InputStreamReaderextends ReaderInputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:

BufferedReader in
= new BufferedReader(new InputStreamReader(System.in));






public class OutputStreamWriterextends WriterOutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。

为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:

Writer out
= new BufferedWriter(new OutputStreamWriter(System.out));
代理对 是一个字符,它由两个 char 值序列表示:高 代理项的范围为 '\uD800' 到 '\uDBFF',后跟范围为 '\uDC00' 到 '\uDFFF' 的低 代理项。

错误代理元素 指的是后面不跟低代理项的高代理项,或前面没有高代理项的低代理项。

此类总是使用字符集的默认替代序列 替代错误代理元素和不可映射的字符序列。如果需要更多地控制编码过程,则应该使用 CharsetEncoder 类。
小绵羊 2011-10-18
  • 打赏
  • 举报
回复
InputStreamReader ir = new InputStreamReader(new FileInputStream("c:/text_utf8.txt"), "UTF-8");
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("c:/text_gbk.txt"),"GBK");
约翰羊 2011-10-18
  • 打赏
  • 举报
回复
路过,学习。
  • 打赏
  • 举报
回复
这不是 JAVA 规定的,这是标准,由标准规定的,JAVA 只是照标准实现而已。
安心逍遥 2011-10-18
  • 打赏
  • 举报
回复
InputStreamReader ir = new InputStreamReader(new FileInputStream("c:/text_utf8.txt"), "UTF-8");
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("c:/text_gbk.txt"),"GBK");
lxbccsu 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 bcbplc 的回复:]
java字符编码问题:常用的GBK与Unicode汉字编码在JAVA是怎样规定的?
[/Quote]
字符集编码不是Java规定的,Java只是按照标准组织的规定来处理字符。如GBK是中国制定的国家标准信息交换用汉字编码字符集,Unicode是国际组织(http://www.unicode.org)制定的编码字符集。
Java语言内部采用Unicode编码,请区分Java编译器对java源文件和JVM对class类文件的编码/解码过程。如:
编程人员在操作系统上用编辑软件来实现源程序代码并以.java扩展名保存在操作系统中,例如用记事本编辑一个java源程序;程序文件在保存时默认采用了操作系统默认支持的编码格式(操作系统默认支持的格式为file.encoding格式)形成了一个.java文件,也即,java程序在被编译前,Java源程序文件是采用操作系统默认支持的file.encoding编码格式保存的,Java源程序中含有中文信息字符和英文程序代码;要查看系统的file.encoding参数:

String encoding = System.getProperty("file.encoding");


编程人员用JDK中的javac.exe来编译这些源代码,形成.class类;用JDK的javac.exe编译Java源程序,在编译的时候,如果没有用-encoding参数指定JAVA源程序的编码格式,则javac.exe首先获得操作系统默认采用的编码格式,也即在编译java程序时,若不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式),然后JDK就把java源程序从file.encoding编码格式转化为Java内部默认的Unicode格式保存到操作系统中形成我们见到的.class文件。最终获得的.class文件是内容以Unicode编码格式保存的类文件,它内部包含源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为Unicode格式了。

最后说一句每种编码都限定了一个明确的字符集合

[Quote=引用楼主 bcbplc 的回复:]
如果一个文本文件是GBK格式或者Uniocde编码,
如何处理。如何转换?
[/Quote]

下面就是转换操作:

[Quote=引用 1 楼 x19881216 的回复:]
InputStreamReader ir = new InputStreamReader(new FileInputStream("c:/text_utf8.txt"), "UTF-8");
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("c:/text_gbk.txt"),"GBK");
[/Quote]

[Quote=引用 3 楼 qybao 的回复:]
读取文件,可以
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("filename"), "charset")); //charset就是指定的编码,如GBK
如果是字符串转换
String s = "ABC";
String ss = new String(s.getByte……
[/Quote]

62,616

社区成员

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

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