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

Java 繁体中文处理完全攻略 -- 简体中文参照操作即可 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 许多人用 Java 处理到中文资料时,常会出现乱码。关于 Java 和中文兼容性的问题,实在让许多程序员为此伤透脑筋,相关的问题每隔几天就会出现在网络上。为了舒缓您紧蹙的眉头,我特别写了这系列文章,解说 Java 牵涉到文字时的内部处理方式,供读者参考。读完本系列文章之后,不求甚解者可以治标,充分理解者可以治本。本文贵在原理解说,别光是囫囵吞枣。 快速解决之道 如果你目前正遭遇到 Java 和中文不兼容的问题,请你注意下面这几点,说不定问题能马上迎刃而解: 1. 检查操作系统设定:先检查你的操作系统,确定国籍语言资料是「Traditional Chinese(Taiwan)」。国籍语言资料的设定会影响 Java 编译器与JRE的判断。我之前就是因为国籍资料设定不正确,出了一堆 Java 和中文不兼容的怪事。 2. 更新 Java 环境版本:改用最新版的 JDK,新版本的 JDK 说不定已经解决你原有的问题。请注意:某些 Java IDE 所用的编译器和 JRE 是不兼容于中文的(我遇过这样的情形),你最好能把 Java IDE 的 JDK 指到新版的 JDK。另外,如果数据库取回的资料是乱码,换别套或者更新 JDBC 驱动程序试试看。 如果还是无法解决,请详细阅读下面各小节的内容,仔细推敲你的错误所在。 Unicode、UTF-16、UTF-8 Java 内部处理字符使用的字序方式是 Unicode,这是一种通行全球的编码方式。Unicode 因为必须将中、韩、日、英、法、阿拉伯……等许多国家所使用的文字都纳入,目前已经包含了六万多个字符,所以 Unicode 使用了 16 个位来为字符编码。因为 Unicode 使用了 16 位编码,所以每个字符都用 16 位来储存或传输是很自然的事,这种储存或传输的格式称为 UTF-16(是不是很像战斗机的名字)。如果你使用到的字符都是西方字符,那么你一定不会想用 UTF-16 的格式,因为体积比 8 位的 Latin-1(一种扩充 ASCII 的编码)多了一倍。所以 Unicode 另有一种储存或传输的格式,叫做 UTF-8。UTF-8 的格式在编码英文时,只需要 8 位,但是中文则是 24 位,所以中文字出现比例高的地方还是使用 UTF-16 比较节省空间。Java 的 Class File(也就是 bytecode)中有一字段叫做常数区(Constant Pool),一律使用 UTF-8 为字符编码。 关于 Unicode 的编码,请查阅「The Unicode Standard, Version 3.0」一书(Addison-Wesley 出版);关于 UTF-8 编码,请查阅「Java I/O」一书的 399 页(O'Reilly 出版)。关于 Java Class File 的格式与 Constant Pool,请查阅「Java Virtual Machine」一书(O'Reilly出版)。 Unicode 与繁体中文编码的互转 虽然 Java 内部完整地使用 Unicode,但是你所使用的操作系统可不见得。以繁体中文版的 Windows 98 来说,预设的编码方式是 MS950,这是一种兼容于 Big 5的编码方式。字符串数据从 Windows 一送进 JRE,JRE 的转码系统马上先把字符串编码由 MS950 转成 Unicode,才能进行处理。字符串资料由 JRE 一送出给 Windows,JRE 的转码系统马上先将其由 Unicode 转成 MS950,操作系统才能处理。 想知道你的 JDK 或 JRE 会用什么样的编码方式来和操作系统沟通,请执行下面的 Java 程序: public class ShowNativeEncoding { public static void main(String[] args) { String enc = System.getProperty("file.encoding"); System.out.println(enc); } } 如果执行结果不是下面的字符串之一,那么你的操作系统国籍语言设定可能就有问题了: · Big5:这是繁体中文 de facto 标准。 · CNS11643:台湾的官方标准繁体中文编码。 · Cp937:繁体中文加上 6204 个使用者自定的字符 · Cp948:繁体中文版 IBM OS/2 用的编码方式。 · Cp964:繁体中文版 IBM AIX 用的编码方式。 · EUC_TW:台湾的加强版 Unicode。 · ISO2022CN:编码中文的一套标准。 · ISO2022CN_CNS:编码中文的一套标准,繁体版,袭自 CNS11643。 · MS950 或 Cp950:ASCII Big5,用于台湾和香港的繁体中文 MS Windows操作系统。 · Unicode:有次序记号的 Unicode。次序记号占用两个 byte,如果其值是0xFEFF,表示使用 big-endian(由大到小)的次序为 Unicode 编码;如果其值是 0xFFFF,表示使用 little-endian(由小到大)的次序为 Unicode 编码。 · UnicodeBig:使用 big-endian(由大到小)的次序为 Unicode 编码。 · UnicodeLittle:使用 little-endian(由小到大)的次序为 Unicode 编码。 · UTF8:使用 UTF-8 为 Unicode 编码。 关于 Big 5 编码,请查阅「CJKV Information Processing」一书的附录 H(O'Reilly出版)。 编译时的注意事项 编译的时候,如果你不说明原始文件编码方式的话, javac 编译器在读进此原始程序文件,开始编译之前,会先去询问操作系统档案预设的编码方式为何。以繁体中文 Windows 98 来说,javac 会先询问 Windows 98,得知档案是用 MS950 的方式编码。然后就可以将档案由 MS950 转成 Unicode 编码方式,开始进行编译。 通常在编译阶段,会造成的错误有下列几种可能: 1. 如果操作系统的国籍资料设定错误,会造成 javac 编译器取得的编码信息是错的。 2. 较差劲的编译器可能没有主动询问操作系统的编码方式,而是采用编译器预设的编码方式。 3. 如果原始程序不是用编译当时操作系统预设的编码方式存盘的,也会造成错误。比方说,原始程序文件是台湾程序员写的,在繁体中文版的 Windows上以 MS950 编码存盘,再经由网络传送到泰国,在泰文版的 Windows 上编译(泰文版 Windows 预设的档案编码方式是 MS874)。 这种因为原始程序文件编码方式和编译器无法匹配所造成的问题,轻则编译成功但执行时文字出现乱码或出现 Error/Exception,重则无法成功编译。这时候,你需要主动透过「-encoding」选项来指定原始程序的编码方式,编译器会以你指定的编码为主,不会再去询问操作系统。下面的例子,我们告诉编译器「TaiwanClass.java」是以繁体中文版 Windows 的「MS950」编码的: javac –encoding MS950 TaiwanClass.java 如果你手上只有某 class 文件,没有原始程序文件,而且你确定其 constant pool 的UTF-8 字段编码错误,你有两种方式可以用来修正编码: 1. 先反编译,取得原始程序,再修改,编译。 2. 或者直接利用 bytecode 编辑软件,直接修改 class 文件。
反无人机技术实战解析:从探测到拦截的全方位防御策略 本文深入解析了反无人机(C-UAS)技术的全链条防御策略。从雷达、无线电频谱、光电等多维度探测技术,到数据融合与威胁评估,再到无线电干扰、导航诱骗及物理拦截等核心拦截手段,系统阐述了如何构建从探测到拦截的实战化防御体系,为关键设施、大型活动等场景提供定制化空域安全解决方案。 阅读详情

相关推荐

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 402

java中文转繁体汉字

基本常用的中文汉字,和一些生僻字都包含在内。 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.HashSet; import java.util.Ite

qq_32909681的博客 2323

共聚焦显微镜的光源、工作原理与选型

共聚焦显微镜作为科研与工业领域中重要的微观成像工具,凭借光源的精准适配性、光学切片技术的三维成像能力,以及对不同工业场景的定制化适配潜力,为半导体检测、工业部件分析、智能制造升级提供了关键技术支撑。深入理解其光源特性、工作原理与选型逻辑,能帮助工程师与技术人员精准匹配设备与生产需求,既保障微观检测的精度与效率,又为产业优化、技术创新筑牢微观观测的基础。

PhotonixBay的博客 1540

【Java】简体中文、繁体中文转换

项目中用到繁体中文语言适配,目前已经有开源的框架可以将简体中文转换成繁体中文,在此基础上封装了一个工具类,可以直接将简体中文的strings.xml转换成繁体中文的strings.xml。 引用Jar包 目前没有上传远程仓库,因此需要手动下载回来,再依赖Jar包。Jar包下载地址:transform.jar Android中使用: 1、将下载回来的Jar包放入模块下的libs文件夹,在模块的Gra...

milovetingting的专栏 1994

密码学新手必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学新手提供了系统性的三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文学习指南。内容涵盖如何高效获取最新论文资源、结构化精读论文的方法论,以及将理论转化为代码实践的路径,旨在帮助初学者快速构建密码学知识体系并应用于研究。

weixin_29214691的博客 323

从零到一:手把手教你用DJI E-Port套件为M350 RTK开发第三方负载(PSDK V3实战)

本文详细介绍了如何使用DJI E-Port套件为M350 RTK开发第三方负载,涵盖硬件配置、开发环境搭建及实战应用。通过PSDK V3开发套件,开发者可以高效实现负载与无人机的通信,适用于电力巡检等工业场景,提升开发效率与系统稳定性。

weixin_26841743的博客 705

java文字竖排_Java输出竖排文字

输出竖排文字,可以作为签名档:╔ ═╦ ═╦ ═╦ ═╗║不║皇║一║天║║胜║图║入║下║║人║霸║江║风║║生║业║湖║云║║一║谈║岁║出║║场║笑║月║我║║醉║中║催║辈║╚ ═╩ ═╩ ═╩ ═╝╔ ═╦ ═╦ ═╦ ═╦ ═╦ ═╗║口║升║,║康║一║祝║║常║职║学║,║年║大║║开║加║有║万║里║家║║。║薪║所║事║身║在║║ ║,║成║如║体║新║║ ║笑║,║意║健║的...

weixin_39749501的博客 726

PCIe链路均衡实战:从Preset调节到系数优化的完整指南(附Synopsy IP案例)

本文深入解析PCIe链路均衡技术,从Preset调节到系数优化的全流程实战指南,特别针对PCIe 3.0/4.0中的Recovery.Equalization状态进行详细说明。通过Synopsy IP案例,展示如何应对高速信号完整性挑战,优化前向反馈均衡(FFE)机制,提升系统性能。

peace的博客 1057

java 中文繁体转换简体

方法一 :ZHConverter 使用ZHConverter可以进行中文的繁简体转换 maven依赖: <!-- https://mvnrepository.com/artifact/com.github.nobodxbodon/zhconverter --> <dependency> <groupId>com.github.nobodxbodon</groupId> <artifactId>zhconverter</...

serialization_rong的博客 7653

告别手动发日报!用n8n+钉钉打造智能报告机器人(含模板下载)

本文详细介绍了如何利用n8n开源工作流自动化平台与钉钉机器人搭建智能日报系统,实现数据自动采集、处理和发送。通过实战步骤和模板下载,帮助用户告别手动处理日报的繁琐,提升工作效率和数据准确性。

h3i4j的博客 859

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1705

[轉] Java繁體中文處理完全攻略(一)

許多人用 Java 處理到中文資料時,常會出現亂碼。關於 Java 和中文相容性的問題,實在讓許多程式員為此傷透腦筋,相關的問題每隔幾天就會出現在網路上。為了舒緩您緊蹙的眉頭,我特別寫了這系列文章,解說 Java 牽涉到文字時的內部處理方式,供讀者參考。讀完本系列文章之後,不求甚解者可以治標,充分理解者可以治本。本文貴在原理解說,別光是囫圇吞棗。 快速解決之道 如果你目前正遭遇到 J...

my ned's blog 364

OceanBase备租户创建(二):通过BACKUP DATABASE PLUS ARCHIVELOG

OceanBase数据库备租户创建方法二:通过BACKUP DATABASE PLUS ARCHIVELOG功能实现,特别适用于社区版和单机版部署模式。

Sebastien23的博客 545

Java繁体中文处理完全攻略 Java Mail MS950

  许多人用 Java 处理到中文资料时,常会出现乱码。关于 Java 和中文兼容性的问题,实在让许多程序员为此伤透脑筋,相关的问题每隔几天就会出现在网络上。为了舒缓您紧蹙的眉头,我特别写了这系列文章,解说 Java 牵涉到文字时的内部处理方式,供读者参考。读完本系列文章之后,不求甚解者可以治标,充分理解者可以治本。本文贵在原理解说,别光是囫囵吞枣。   快速解决之道   如果你目前正...

小嘴冰凉 548

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

中文化和国际化问题权威解析之四:Java中文化和国际化攻略

一般攻略 既然在 Java 内部是直接使用 Unicode 表示一切字符的,表达中文自然不成问题。因此所谓的中文问题并不是由 Java 本身引起的。而是因为对 Java 和 Unicode 理解不透或应用不当引起的。下面列出的原则,是解决一切中文问题的总纲: 在 Java 内部,正确使用 Unicode 标准。对于中文来...

溺水的鱼 - Later equals never. 260

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java连接mysql数据库攻略

         连接mysql数据库攻略 一. 软件下载  Mysql  下载版本:4.1.11  http://dev.mysql.com/downloads/mysql/4.1.html  JDBC驱动  下载版本:3.1.8  http://dev.mysql.com/downloads/connector/j/3.1.html  Mysql界面插件:mysql-front  下载版本镜像

纯冰蓝色的BLOG 5085

MAA明日方舟助手:智能游戏辅助工具完全指南

你是否曾经因为重复的日常任务而感到疲惫?是否希望在《明日方舟》中能够更高效地管理资源,同时确保账号安全?MAA明日方舟助手正是为你设计的智能解决方案。这款基于图像识别技术的辅助工具,能够帮助你自动化处理游戏中的日常任务,让你专注于策略和游戏乐趣。 ## 为什么选择MAA助手? 在日常的《明日方舟》游戏体验中,许多玩家都会遇到相同的挑战:重复性的操作占据了大量时间,而真正有趣的策略部分反而被压缩

gitblog_00784的博客 241

中文化和国际化问题浅析之五 中文化和国际化攻略(阿里巴巴大牛写的)

中文化和国际化攻略 一般攻略 既然在 Java 内部是直接使用 Unicode 表示一切字符的,表达中文自然不成问题。因此所谓的中文问题并不是由 Java 本身引起的。而是因为对 Java 和 Unicode 理解不透或应用...

fenglsh的博客 244
上一篇: Base64类
下一篇: 基于J2EE的应用服务器相互连接实验获得成功
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值