知识大全 Java繁体中文处理完全攻略(一)

Posted

篇首语:活着,如同生命中最后一天般活着。学习,如同你会永远活着般学习。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java繁体中文处理完全攻略(一)相关的知识,希望对你有一定的参考价值。

Java繁体中文处理完全攻略(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  许多人用 Java 处理到中文资料时 常会出现乱码 关于 Java 和中文兼容性的问题 实在让许多程序员为此伤透脑筋 相关的问题每隔几天就会出现在网络上 为了舒缓您紧蹙的眉头 我特别写了这系列文章 解说 Java 牵涉到文字时的内部处理方式 供读者参考 读完本系列文章之后 不求甚解者可以治标 充分理解者可以治本 本文贵在原理解说 别光是囫囵吞枣      快速解决之道  如果你目前正遭遇到 Java 和中文不兼容的问题 请你注意下面这几点 说不定问题能马上迎刃而解      检查操作系统设定 先检查你的操作系统 确定国籍语言资料是「Traditional Chinese(Taiwan)」 国籍语言资料的设定会影响 Java 编译器与JRE的判断 我之前就是因为国籍资料设定不正确 出了一堆 Java 和中文不兼容的怪事      更新 Java 环境版本 改用最新版的 JDK 新版本的 JDK 说不定已经解决你原有的问题 请注意 某些 Java IDE 所用的编译器和 JRE 是不兼容于中文的(我遇过这样的情形) 你最好能把 Java IDE 的 JDK 指到新版的 JDK 另外 如果数据库取回的资料是乱码 换别套或者更新 JDBC 驱动程序试试看     如果还是无法解决 请详细阅读下面各小节的内容 仔细推敲你的错误所在      Unicode UTF UTF   Java 内部处理字符使用的字序方式是 Unicode 这是一种通行全球的编码方式 Unicode 因为必须将中 韩 日 英 法 阿拉伯……等许多国家所使用的文字都纳入 目前已经包含了六万多个字符 所以 Unicode 使用了 个位来为字符编码 因为 Unicode 使用了 位编码 所以每个字符都用 位来储存或传输是很自然的事 这种储存或传输的格式称为 UTF (是不是很像战斗机的名字) 如果你使用到的字符都是西方字符 那么你一定不会想用 UTF 的格式 因为体积比 位的 Latin (一种扩充 ASCII 的编码)多了一倍 所以 Unicode 另有一种储存或传输的格式 叫做 UTF UTF 的格式在编码英文时 只需要 位 但是中文则是 位 所以中文字出现比例高的地方还是使用 UTF 比较节省空间 Java 的 Class File(也就是 bytecode)中有一字段叫做常数区(Constant Pool) 一律使用 UTF 为字符编码     关于 Unicode 的编码 请查阅「The Unicode Standard Version 」一书(Addison Wesley 出版) 关于 UTF 编码 请查阅「Java I/O」一书的 页(O Reilly 出版) 关于 Java Class File 的格式与 Constant Pool 请查阅「Java Virtual Machine」一书(O Reilly出版)      Unicode 与繁体中文编码的互转  虽然 Java 内部完整地使用 Unicode 但是你所使用的操作系统可不见得 以繁体中文版的 Windows 来说 预设的编码方式是 MS 这是一种兼容于 Big 的编码方式 字符串数据从 Windows 一送进 JRE JRE 的转码系统马上先把字符串编码由 MS 转成 Unicode 才能进行处理 字符串资料由 JRE 一送出给 Windows JRE 的转码系统马上先将其由 Unicode 转成 MS 操作系统才能处理     想知道你的 JDK 或 JRE 会用什么样的编码方式来和操作系统沟通 请执行下面的 Java 程序     public class ShowNativeEncoding     public static void main(String[] args)     String enc = System getProperty( file encoding );    System out println(enc);            如果执行结果不是下面的字符串之一 那么你的操作系统国籍语言设定可能就有问题了     · Big 这是繁体中文 de facto 标准     · CNS 台湾的官方标准繁体中文编码     · Cp 繁体中文加上 个使用者自定的字符    · Cp 繁体中文版 IBM OS/ 用的编码方式     · Cp 繁体中文版 IBM AIX 用的编码方式     · EUC_ 台湾的加强版 Unicode     · ISO CN 编码中文的一套标准     · ISO CN_CNS 编码中文的一套标准 繁体版 袭自 CNS     · MS 或 Cp ASCII + Big 用于台湾和香港的繁体中文 MS Windows操作系统     · Unicode 有次序记号的 Unicode 次序记号占用两个 byte 如果其值是 xFEFF 表示使用 big endian(由大到小)的次序为 Unicode 编码 如果其值是 xFFFF 表示使用 little endian(由小到大)的次序为 Unicode 编码     · UnicodeBig 使用 big endian(由大到小)的次序为 Unicode 编码     · UnicodeLittle 使用 little endian(由小到大)的次序为 Unicode 编码     · UTF 使用 UTF 为 Unicode 编码     关于 Big 编码 请查阅「CJKV Information Processing」一书的附录 H(O Reilly出版)      编译时的注意事项  编译的时候 如果你不说明原始文件编码方式的话 javac 编译器在读进此原始程序文件 开始编译之前 会先去询问操作系统档案预设的编码方式为何 以繁体中文 Windows 来说 javac 会先询问 Windows 得知档案是用 MS 的方式编码 然后就可以将档案由 MS 转成 Unicode 编码方式 开始进行编译     通常在编译阶段 会造成的错误有下列几种可能      如果操作系统的国籍资料设定错误 会造成 javac 编译器取得的编码信息是错的      较差劲的编译器可能没有主动询问操作系统的编码方式 而是采用编译器预设的编码方式      如果原始程序不是用编译当时操作系统预设的编码方式存盘的 也会造成错误 比方说 原始程序文件是台湾程序员写的 在繁体中文版的 Windows上以 MS 编码存盘 再经由网络传送到泰国 在泰文版的 Windows 上编译(泰文版 Windows 预设的档案编码方式是 MS )     这种因为原始程序文件编码方式和编译器无法匹配所造成的问题 轻则编译成功但执行时文字出现乱码或出现 Error/Exception 重则无法成功编译 这时候 你需要主动透过「 encoding」选项来指定原始程序的编码方式 编译器会以你指定的编码为主 不会再去询问操作系统 下面的例子 我们告诉编译器「TaiwanClass java」是以繁体中文版 Windows 的「MS 」编码的     javac –encoding MS TaiwanClass java    如果你手上只有某 class 文件 没有原始程序文件 而且你确定其 constant pool 的UTF 字段编码错误 你有两种方式可以用来修正编码      先反编译 取得原始程序 再修改 编译      或者直接利用 bytecode 编辑软件 直接修改 class 文件 cha138/Article/program/Java/Javascript/201311/25271

相关参考

知识大全 关于Java程序中类加载完全揭密

关于Java程序中类加载完全揭密  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  类加载是java

知识大全 Java打印程序设计全攻略

开发技巧:Java打印程序设计全攻略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前言  在我

知识大全 我希望我爱的所有人都可以平平安安健康快乐的。这段话的繁体字

我希望我爱的所有人都可以平平安安健康快乐的。这段话的繁体字爱,主要是看你如何处理它,我认为:爱情平平淡淡才是真,在爱上了一个人,是不会在乎爱情,浪漫和爱情多种方式,不同如何去爱每一个人,不知道够不够,

知识大全 java 多线程 完全版

  尽管线程对象的常用方法可以通过API文档来了解但是有很多方法仅仅从API说明是无法详细了解的我们先来说一下线程对象的几个重要的方法   首先我们来说明start()方

知识大全 浅析Java与C#的事件处理机制(一)

浅析Java与C#的事件处理机制(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java与

知识大全 放下一切去旅行繁体字

放下一切去旅行繁体字繁体字是指汉字简化后被简化字所代替的原来笔画较多的汉字,以国务院2013年6月5日公布实施的《〈通用规范汉字表〉附件之一〈规范字与繁体字、异体字对照表〉》为最新规范,在该对照表中“

知识大全 给几个繁体字网名

给几个繁体字网名冷眸透射出刺骨的温柔ぢ彼此强颜欢笑、扯痛嘴角.......................................给几个英文网名。(繁体字)女孩:ariel(希伯来),上帝的母

知识大全 穿越火线不能用繁体字网名的吗

穿越火线不能用繁体字网名的吗?我想用‘羙’这个字!怎么打出这个字?ctrl+c点你要写的字然后进游戏点ctrl+V就OK了给我想个带(升)这个字的繁体字网名火星文:驲升玥恒繁体:日升月恒火星文:鼎宬尨

知识大全 关于JAVA的中文问题

关于JAVA的中文问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一主题关于JAVA的中文问

知识大全 Java多线程处理机制

Java多线程处理机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一线程的同步  Java应