1. 前言
在基于Java语言的开发中,我们经常需要对汉字进行处理以及显示。Java语言默认的编码方式是UNICODE,而我们通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的,那么怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将简单对此问题进行分析并给出相应解决方案。
2. 正文
我们基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GB2312 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。
String sEnglish = “apple”;
String sChinese = “苹果”;
String s = “苹果 apple ”;
sEnglish 的长度是5,sChinese的长度是4,而 s 默认的长度是14。对于 sEnglish来说, Java 中的各个类都支持得非常好,肯定能够正确显示。但对于 sChinese 和 s 来说,虽然 Java Soft 声明 Java 的基本类已经考虑到对多国字符的支持(默认 UNICODE 编码),但是如果操作系统的默认编码不是 UNICODE ,而是国标码等呢?
从 Java 源代码到得到正确的结果,要经过 “Java 源代码-> Java 字节码-> 虚拟机->操作系统->显示设备”的过程。在上述过程中的每一步骤,我们都必须正确地处理汉字的编码,才能够使最终的显示结果正确。
“Java 源代码-> Java 字节码”,标准的 Java 编译器 javac 使用的字符集是系统默认的字符集,比如在中文 Windows 操作系统上就是 GBK ,而在 Linux 操作系统上就是ISO-8859-1,所以大家会发现在 Linux 操作系统上编译的类中源文件中的中文字符都出了问题。解决的办法就是在编译的时候添加 encoding 参数,这样才能够与平台无关。用法是:
“Java 字节码->虚拟机->操作系统”, Java 运行环境 (JRE) 分英文版和国际版,但只有国际版才支持非英文字符。 Java 开发工具包 (JDK) 肯定支持多国字符,但并非所有的计算机用户都安装了 JDK 。很多操作系统及应用软件为了能够更好的支持 Java ,都内嵌了 JRE 的国际版本,为自己支持多国字符提供了方便。
“操作系统->显示设备”,对于汉字来说,操作系统必须支持并能够显示它。英文操作系统如果不搭配特殊的应用软件的话,是肯定不能够显示中文的。
还有一个问题,就是在 Java 编程过程中,对中文字符进行正确的编码转换。例如,向网页输出中文字符串的时候,不论你是用
out.println(string);
还是用
<%=string%>,
都必须作 UNICODE 到 GBK 的转换,或者手动,或者自动。在 JSP 1.0中,可以定义输出字符集,从而实现内码的自动转换。用法是
<%@page contentType=”text/html;charset=gb2312” %>
但是在一些 JSP 版本中并没有提供对输出字符集的支持,(例如 JSP 0.92),这就需要手动编码输出了,方法非常多。最常用的方法是
String s1 = request.getParameter(“keyword”);
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);
getBytes 方法用于将中文字符以“ISO-8859-1”编码方式转化成字节数组,而“GBK” 是目标编码方式。我们从以ISO-8859-1方式编码的数据库中读出中文字符串 s1 ,经过上述转换过程,在支持 GBK 字符集的操作系统和应用软件中就能够正确显示中文字符串 s2 。
分享到:
相关推荐
2. "Think In Java.chm":这是《Thinking in Java》的中文版,这本书是学习Java编程的经典之作,对于理解OSGi的基础——Java语言,非常有帮助。 3. "EXT2.0中文教程.exe":EXTJS是一个用于构建富客户端Web应用的...
5. Effective Java Second Edition中文版:该书是Java编程的经典之作,中文版的发布让更多的中国开发者能学习到最佳实践。 6. 国内开源工作流Fire Workflow:Fire Workflow是中国本土的开源工作流引擎,它的出现...
Spring框架自2003年由Rod Johnson创立以来,迅速成为了Java开发领域中最受欢迎的企业级应用框架之一。它以简化企业级应用开发为目标,通过一系列核心模块如依赖注入(Dependency Injection)、面向切面编程(Aspect-...
【Java编程初探:"Hello, World!" 实践】 在编程的世界里,"Hello, World!" 是每一个新手程序员迈出的第一步。它是一个简单的程序,旨在介绍基础的编程语法和环境设置。在这个实践中,我们将深入探讨Java语言,通过...
Tesseract的使用主要分为两个方面,一是作为独立的应用程序进行使用,二是通过编程语言进行调用。如果只需要进行简单的文字识别,可以直接通过命令行的方式调用Tesseract。首先需要下载Tesseract的开源文件,可以...
**1.1 Java EE 6编程模型讨论** - **Java EE 6敏捷性评估**:探讨Java EE 6是否真正达到了敏捷开发的标准。 - **具体与抽象之间的平衡**:分析Java EE 6如何在提供具体功能的同时保持高度的抽象性和可扩展性。 **...
### Android HelloWorld:初探Android应用开发 #### 一、项目简介与环境搭建 **标题**:“Android_helloworld” **描述**:“第一个Android开发项目Hello_world” **标签**:“第一个项目” **部分内容概述**:...
### 深入浅出_google_android(pdf格式高清中文版).pdf #### 知识点概述 本PDF文档《深入浅出_google_android》是一份专为有一定Java基础的学习者准备的Android开发入门指南。该文档通过简洁明了的方式,结合实例...
通过分析这个应用,我们可以学习到Java编程语言在开发移动应用中的应用,以及可能涉及的相关技术。 首先,从标题“NitaWeather:我的第一个天气应用”可以看出,这是一个开发者初次尝试的项目,可能是其学习Java或...
Velocity Java开发指南中文版 Velocity Web应用开发指南中文版 Velocity模板使用指南中文版 VTL语法参考指南中文版 DB4O系统应用之起步篇 velocity用户手册 velocity语法 velocity初探 velocity1.5帮助说明 velocity...
**JSF(JavaServer Faces)** 是一种Java平台上的用户界面组件框架,用于构建和呈现Web应用程序。它提供了一种模型-视图-控制器(MVC)架构,使得开发者能够更方便地创建交互式Web应用。JSF的核心是组件库,它包含一...
- **常见问题解答**:汇总了开发者在使用过程中可能遇到的问题及解决办法。 - **项目地址**:给出了SpringBlade及其相关项目的GitHub地址,便于用户获取最新源码和支持。 #### 五、工程结构解析 - **blade-auth**:...
8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Javascript 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器 9.2 ...
- **RCP与PLUGIN**:解释RCP和普通插件的区别,以及它们在应用程序中的作用。 2. **创建第一个RCP程序** - **创建一个RCP程序**:指导读者创建基本的RCP项目,包括设置项目结构和编写启动类。 - **启动RCP程序**...
8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Javascript 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器 9.2 语音识别 9.3 GoogleMap ...
8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Javascript 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器 9.2 ...