您现在的位置是:首页
>
中文字符 Java语言中字符的处理
Java语言中字符的处理 摘要 本文主要讨论了Java语言中字符的特殊表达形式 尤其是中文信息的表达处理 阐述了字符处理的关键是要将十六位U icode字符 转换为本地下层平台 也就是运行Jav

Java语言中字符的处理
摘要 本文主要讨论了Java语言中字符的特殊表达形式 尤其是中文信息的表达处理 阐述了字符处理的关键是要将十六位Unicode字符 转换为本地下层平台 也就是运行Java虚拟处理机的平台能够理解的字符形式 关键词 Java 字符 位 位 Unicode字符集 Java是一种编程语言 一个运行系统 一套开发工具和一个应用程序编程界面(API) Java建立在C++的熟悉 有用的特征之上 而取消了C++的复杂的 危险的和多余的元素 它是一个更安全 更简单 更容易使用的语言 Java的字符表达 Java语言和C语言对字符进行了互不相同的描述 Java使用 位的Unicode字符集(该标准描述了许多语言的各种不同字符) 因此Java字符是一个 位的无符号整数 字符变量用来存放单个字符 而不是完整的字符串 一个字符(character) 就是单个字母(letter) 许多字母构成一个单词 一组单词组成句子 以此类推 但是对于含有诸如中文信息的字符 就不是那么简单了 Java的基本的char类型被定义成无符号的 位 它是Java中唯一的一个无符号类型 使用 位表达字符的主要原因是要让Java能够支持任何Unicode字符 因此而使得Java适用于描述或显示任何被Unicode支持的语言 可移植性也就会更好 但是 能够支持某种语言的字符串显示 和能够正确打印某种语言的字符串 常常是两个不同的问题 由于Oak(Java最初的代号)开发组的主要环境是Unix系统和某些源于Unix的系统 所以对开发人员来说 最为方便实用的字符集是ISOLatin 相应地 这一开发组就带有Unix遗传性 也就导致了Java的I/O系统在很大程度上以Unix的流概念为模型 而在Unix系统中 每一种I/O设备都是用一串 比特的流来表示 这种在I/O系统方面取模于Unix的做法 使得Java语言拥有 位的Java字符 而却只有 位的输入设备 这样就给Java带来了些不足 因此在任何一处Java字符串按 位来读入或写出的地方 都得有一小段程序代码 被称为 劈(hack) 来将 位的字符映射成为 位Unicode 或将 位的Unicode劈成 位字符 问题及解决 我们要实现从一个文件读取信息 尤其是读取含有中文信息的文件 并将读取到的信息显示在屏幕上 一般我们使用FileInputStream函数打开文件 readChar函数读入字符 如下 import java io *; public class rf{ public static void main(String args[]) { FileInputStream fis; DataInputStream dis; char c; try { fis = new FileInputStream( xinxi txt ); dis = new DataInputStream(fis); while (true) { c = dis readChar(); System out print(c); System out flush(); if (c == n ) break; } fis close(); } catch (Exception e) { } System exit( ); } } 但是事实上 运行这一程序 所能得到的输出结果是一堆无用的乱码 不能正确输出xinxi txt文件内容 其原因是readChar函数读入的是 位的Unicode字符 而System out print却将其当作八位的ISO latin 字符输出 Java 版本引入了一套全新的Readers和Writers接口来处理字符 我们可以利用InputStreamReader类而不是DataInputStream来处理文件 修改上面的程序如下 import java io *; public class rf { public static void main(String args[]) { FileInputStream fis; InputStreamReader irs; char ch; try { fis = new FileInputStream( xinxi txt ); irs = new InputStreamReader(fis); while (true) { ch = (char) irs read(); System out print(c); System out flush(); if (ch == n ) break; } fis close(); } catch (Exception e) { } System exit( ); } } 这样才能正确输出xinxi txt中的文本(尤其是中文信息) 另外 当xinxi txt文件来自不同的机器 即来自不同操作平台(或汉字内码不同)的机器 比如 文件来自客户端(客户端上传文件给服务器) 而读取文中信息的操作由服务器端执行 如果用上面的程序来实现这一功能 就有可能仍然不能得到正确的结果 其原因就是输入编码转换失败 我们还需要进行如下的改动 int c ; int j= ; StringBuffer str=new StringBuffer(); char lll[][]= new char[ ][ ]; String ll= ; try { fis = new FileInputStream( fname txt ); irs = new InputStreamReader(fis); c =irs read(lll[ ] ); while (lll[ ][j]!= ) { str append(lll[ ][j]); j=j+ ; } ll=str toString(); System out println(ll); } catch (IOException e) { System out println(e toString());} 这样 输出的结果就正确了 当然 上面的程序是不完整的 只是说明了一下解决的方法 总之 Java语言中字符处理 尤其是中文信息的处理 比较特殊 在Java中 字符处理的关键是要将十六位Unicode字符 转换为本地下层平台也就是运行Java虚拟处理机的平台能够理解的字符形式 lishixinzhi/Article/program/Java/JSP/201311/19254 很赞哦! (1090)