00000007.htm
来自「水木清华BBS」· HTM 代码 · 共 201 行 · 第 1/2 页
HTM
201 行
对象也可以用同样的方法从构造函数中获得. <BR> <BR> <BR>READING/WRITING UNICODE USING I/O STREAM ENCODINGS <BR> <BR>与常用的其他语言不同 Java 使用双字节的 Unicode 字符集. 这样做带来的问题是: <BR>Java的字符集是如何在磁盘文件上存储的, 并且 Java 如何使用现有的大量 ASCII <BR>格式的数据? <BR> <BR>早期的 JDK(tm) , 比如 1.0.2 版本, 中这个问题没有得到解决. 例如: <BR>DataInputStream.readLine 方法用于读取整行的输入, 但他无法正确的将字节转化为 <BR>字符, 因此已被废弃. 在 Unicode 得到广泛的使用前, 这个问题仍然是重要的. <BR> <BR>解决问题之道是使用 Reader 和 Writer 这一对 I/O 类. 他们是基于字节流的 <BR>(如同FileInputStream), 并且实现字符, 字节的双向转换. <BR> <BR>下面的程序可以得到系统的缺省转换格式: <BR> <BR> public class encode { <BR> public static void main(String args[]) <BR> { <BR> String p = System.getProperty("file.encoding"); <BR> System.out.println(p); <BR> } <BR> } <BR> <BR>在我的机器和 Java 2 软件上, 输出为 "GBK", 这个格式为: <BR> <BR> GBK, Simplified Chinese <BR> <BR>对于 encodings 的表格可以从如下获得: <BR> <BR> <A HREF="http://java.sun.com/products/jdk/1.1/intl/html/intlspec.doc7.html">http://java.sun.com/products/jdk/1.1/intl/html/intlspec.doc7.html</A> <BR> <BR>如果你希望直接指定转换方式, 下面的程序就是范例, 他将Unicode字母表中的所有小写字母写入文件。 <BR>在这些字母中, 有一些的高字节是非零的(就是那些大于'\u00ff'的字母),因此正确的转化十分重要。 <BR>这里使用的方式为 UTF-8, 他能够将ASCII字符转换为单字节字符,而其他字符仍然保持两到三个字节。 <BR> <BR>import java.io.*; <BR> <BR>public class enc1 { <BR> <BR> public static void main(String args[]) { <BR> try { <BR> FileOutputStream fos = new FileOutputStream("out"); <BR> OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8"); <BR> for (int c = '\u0000'; c <= '\uffff'; c++) { <BR> if (!Character.isLowerCase((char)c)) <BR> continue; <BR> osw.write(c); <BR> } <BR> osw.close(); <BR> } catch (IOException e) { <BR> System.err.println(e); <BR> } <BR> } <BR>} <BR> <BR>相反的转换过程如下; <BR> <BR>import java.io.*; <BR> <BR>public class enc2 { <BR> <BR> public static void main(String args[]) { <BR> try { <BR> FileInputStream fis = new FileInputStream("out"); <BR> InputStreamReader isr = new InputStreamReader(fis, "UTF8"); <BR> for (int c = '\u0000'; c <= '\uffff'; c++) { <BR> if (!Character.isLowerCase((char)c)) <BR> continue; <BR> int ch = isr.read(); <BR> if (c != ch) <BR> System.err.println("error"); <BR> } <BR> isr.close(); <BR> } catch (IOException e) { <BR> System.err.println(e); <BR> } <BR> } <BR>} <BR> <BR>InputStreamReader 和 OutputStreamWriter 是用于字节流域字符流进行相互转化的类。 <BR> <BR> <BR> <BR> <BR>-- <BR>Write once,douche anywhere. <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 210.78.133.83] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?