Java中文编码转换分析

合集下载

stringescapeutils 中文编码

stringescapeutils 中文编码

stringescapeutils 中文编码在编程中,经常需要对文本进行编码和解码。

其中,字符串编码是一种重要的编码方式,其目的是将特殊字符转义为可读的文本形式。

在Java编程中,一个常用的字符串编码工具是stringescapeutils库。

这个库可以将字符串中的特殊字符进行转义,同时也可以进行反转义操作。

本文将对stringescapeutils的中文编码进行分步骤阐述。

第一步,导入库在使用stringescapeutils库之前,需要先导入该库。

在Java 中,可以使用import语句完成这一步操作。

示例代码如下:import mons.text.StringEscapeUtils;第二步,进行编码操作进行中文编码需要使用工具类中的escapeJava方法。

该方法可以将特殊字符转义为Unicode编码形式。

下面是一个具体的例子,将中文字符串进行编码:String original = "中文编码";String encoded = StringEscapeUtils.escapeJava(original);编码完成后,原始字符串中的中文会被转义为Unicode编码。

其中,中文字符“中”,使用\u4E2D的形式进行编码;“文”使用\u6587进行编码。

第三步,进行解码操作进行解码操作需要使用工具类中的unescapeJava方法。

该方法可以将Unicode编码形式的字符串,还原为原始字符串。

下面是一个具体的例子,对上述的encoded字符串进行解码:String decoded = StringEscapeUtils.unescapeJava(encoded);解码完成后,会得到一个还原的字符串“中文编码”。

需要注意的是,在解码操作中,如果存在字符编码错误,会产生IllegalArgumentException异常。

综上所述,stringescapeutils库提供了方便的字符串编码和解码操作。

Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换1、函数介绍在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为:1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetName 转换public byte[] getBytes(String charsetName) throws UnsupportedEncodingException2)将字节数组以指定的编码集合构造成字符串,完成charsetName-〉Unicode 转换public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException2、Unicode与各编码之间的直接转换下面以对中文字符串"a中文"的编码转换为例,来了解各种编码之间的转换1)Unicode和GBK测试结果如下,每个汉字转换为两个字节,且是可逆的,即通过字节可以转换回字符串String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)2)Unicode和UTF-8测试结果如下,每个汉字转换为三个字节,且是可逆的,即通过字节可以转换回字符串String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)3)Unicode和ISO-8859-1测试结果如下,当存在汉字时转换失败,非可逆,即通过字节不能再转换回字符串String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3FByteArray-ISO-8859-1〉String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)3、Unicode与各编码之间的交叉转换在上面直接转换中,由字符串(Unicode)生成的字节数组,在构造回字符串时,使用的是正确的编码集合,如果使用的不是正确的编码集合会怎样呢?会正确构造吗?如果不能正确构造能有办法恢复吗?会信息丢失吗?下面我们就来看看这种情况,这部分可以说明在某些情况下虽然我们最终正确显示了结果,但其间仍然进行了不正确的转换。

java string转换编码

java string转换编码

在Java中,可以使用`String`类的`getBytes()`方法将字符串转换为字节数组,然后使用`getBytes()`方法将字节数组转换为指定编码的字符串。

以下是一个示例代码,将字符串从UTF-8编码转换为ISO-8859-1编码:
```java
String str = "Hello, world!";
byte[] bytes = str.getBytes("UTF-8");
String result = new String(bytes, "ISO-8859-1");
System.out.println(result);
```
在这个例子中,我们首先将字符串`str`转换为UTF-8编码的字节数组`bytes`,然后使用`new String()`方法将字节数组转换为ISO-8859-1编码的字符串`result`。

最后,我们输出`result`的值。

请注意,转换编码时可能会丢失数据或产生乱码。

因此,在转换编码之前,请确保您了解源编码和目标编码的差异,并仔细检查转换后的结果是否正确。

Java中文乱码问题产生原因分析

Java中文乱码问题产生原因分析

Java中文乱码问题产生原因分析在计算机中,只有二进制的数据,不管数据是在内存中,还是在外部存储设备上。

对于我们所看到的字符,也是以二进制数据的形式存在的。

不同字符对应二进制数的规则,就是字符的编码。

字符编码的集合称为字符集。

17.1.1 常用字符集在早期的计算机系统中,使用的字符非常少,这些字符包括26个英文字母、数字符号和一些常用符号(包括控制符号),对这些字符进行编码,用1个字节就足够了(1个字节可以表示28=256种字符)。

然而实际上,表示这些字符,只使用了1个字节的7位,这就是ASCII编码。

1.ASCIIASCII(American Standard Code for Information Interchange,美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统。

每一个ASCII码与一个8位(bit)二进制数对应。

其最高位是0,相应的十进制数是0~127。

例如,数字字符“0”的编码用十进制数表示就是48。

另有128个扩展的ASCII码,最高位都是1,由一些图形和画线符号组成。

ASCII是现今最通用的单字节编码系统。

ASCII用一个字节来表示字符,最多能够表示256种字符。

随着计算机的普及,许多国家都将本地的语言符号引入到计算机中,扩展了计算机中字符的范围,于是就出现了各种不同的字符集。

2.ISO8859-1因为ASCII码中缺少£、ü和许多书写其他语言所需的字符,为此,可以通过指定128以后的字符来扩展ASCII码。

国际标准组织(ISO)定义了几个不同的字符集,它们是在ASCII码基础上增加了其他语言和地区需要的字符。

其中最常用的是ISO8859-1,通常叫做Latin-1。

Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中0~127的字符与ASCII码相同。

ISO 8859另外定义了14个适用于不同文字的字符集(8859-2到8859-15)。

Javaweb中常见编码乱码问题(一)

Javaweb中常见编码乱码问题(一)

Javaweb中常见编码乱码问题(⼀) 最近在看Java web中中⽂编码问题,特此记录下。

本⽂将会介绍常见编码⽅式和Java web中遇到中⽂乱码问题的常见解决⽅法:⼀、常见编码⽅式: 1、ASCII 码 众所周知,这是最简单的编码。

它总共可以表⽰128个字符,0~31是控制字符如换⾏、回车、删 除等,32~126是打印字符,可以通过键盘输⼊并且能够显⽰出来的。

2、ISO-8859-1 它是基于ASCII码基础上扩展的,它总共能表⽰256个字符,涵盖了⼤多数西欧语⾔字符。

详见 该编码不⽀持中⽂,举个中⽂编码栗⼦: 字符串“I am 君⼭”⽤ ISO-8859-1 编码,下⾯是编码结果: 由于ISO-8859-1 是单字节编码且不⽀持中⽂,直接将中⽂字符转成‘3f’, 3f也就是常见的"?"字符 3、GB2312 它是双字节编码,共包含6763个汉字。

4、GBK 汉字内码扩展规范,是基于GB2312上拓展的,加⼊了更多的汉字,能表⽰21003个汉字。

它的编码 是和GB2312兼容的。

也就是说⽤GB2312编码的汉字可以⽤GBK来解码,并且不会乱码。

倒过来就不完 全可以了,因为GB2312描述的汉字⽐GBK少。

5、UTF-16 UTF-16是基于Unicode上定义的,⽤两个字节来表⽰Unicode的转换格式,它采⽤定长的表⽰⽅法, 即不能什么字符都可以⽤两个字节表⽰。

两个字节是16个bit,所以就做UTF-16。

(Unicode 囊括了世界 上所有语⾔,所有语⾔均可通过Unicode来相互翻译,详解) 6、UTF-8 由于UTF-16统⼀采⽤两个字节来表⽰⼀个字符,有很多字符⽤⼀个字节表⽰即可。

所以存储空间放 ⼤了⼀倍,还会增加⽹络传输的流量,所以推出了UTF-8。

UTF-8采⽤了⼀种变长技术,每个编码区域有 不同的字码长度。

通过上⾯介绍和对⽐,对于中⽂字符的处理我想UTF-8是最理想的中⽂编码。

encodeuri 编码java 中文

encodeuri 编码java 中文

文章主题:深入理解encodeURI在Java中对中文的编码在日常的开发工作中,经常会遇到需要对URL进行编码的情况。

其中,encodeURI是JavaScript中的一个内置函数,用于对URL进行编码处理。

然而,在Java中对中文进行URL编码时,我们也会遇到一些问题和需求。

本文将深入探讨encodeURI在Java中对中文的编码问题,并从简单到复杂的角度进行全面评估和讨论。

一、encodeURI简介encodeURI是JavaScript中的一个函数,用于对URL进行编码,它会把某些字符转换成相应的UTF-8编码,以便能够安全地传输。

在使用encodeURI对URL进行编码时,我们需要注意一些细节,比如对空格、中文等字符的处理方式。

接下来,我们将从简单的encodeURI 用法开始,逐步深入到Java中对中文进行URL编码的处理。

二、encodeURI的用法在JavaScript中,encodeURI的用法非常简单。

我们可以使用encodeURI对URL中的中文进行编码:```javascriptvar url = "搜索?keyword=中文";var encodedUrl = encodeURI(url);console.log(encodedUrl);```通过上述代码,我们可以看到encodeURI会把中文转换成相应的UTF-8编码,从而生成安全的URL。

然而,在Java中,我们需要借助一些工具类来实现类似的URL编码功能。

三、Java中对中文进行URL编码在Java中,我们可以使用包中的URLEncoder来对URL中的中文进行编码。

其用法如下:```javaString url = "搜索?keyword=中文";String encodedUrl = URLEncoder.encode(url, "UTF-8"); System.out.println(encodedUrl);```通过上述代码,我们可以看到使用URLEncoder对URL进行编码时,需要指定编码方式,这里我们使用了UTF-8进行编码。

10中文乱码问题

10中文乱码问题

Java中文乱码问题的解决方案时间:2011-02-10 16:58:26来源:网络整理作者:未知点击:45次只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。

下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。

1.以POST方法提交的表单数据中有中文字符由于Web容器默认的编码方式是ISO-8859只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。

下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。

1.以POST方法提交的表单数据中有中文字符由于Web容器默认的编码方式是ISO-8859-1,在Servlet/JSP程序中,通过请求对象的getParameter()方法得到的字符串是以ISO-8859-1转换而来,这是导致乱码产生的原因之一。

为了避免容器以ISO-8859-1的编码方式返回字符串,对于以POST方法提交的表单数据,可以在获取请求参数值之前,调用request.setCharacterEncoding("GBK"),明确指定请求正文使用的字符编码方式是GBK。

在向浏览器发送中文数据之前,调用response.setContentType ("text/html;charset=GBK"),指定输出内容的编码方式是GBK。

对于JSP页面,在获取请求参数值之前,写上下面的代码:<%request.setCharacterEncoding("GB2312");%>为了指定输出内容的编码格式,设置page指令contentType属性,如下:<%@ page contentType="text/html; charset=GBK" %>在Web容器转换JSP页面后的Servlet类中,会自动添加下面的代码:response.setContentType("text/html; charset=GBK");2.以GET方法提交的表单数据中有中文字符当提交表单采用GET方法时,提交的数据作为查询字符串被附加到URL的末端,发送到服务器,此时在服务器端调用setCharacterEncoding()方法也就没有作用了。

java中文转换Unicode编码

java中文转换Unicode编码

Java中文Unicode中文转换转换背景:把中文转换成Unicode编码再直接输出,程序解析XML,properties,以及JS 打印提示信息后再把Unicode编码转回中文就没有问题了。

提供两种方法把中文转换成Unicode编码:第一种办法:Eclipse中JS转换法1. web项目中随便新建一个*.js文件,将文件的编码属性设置为utf8 (右击文件从弹出菜单中选择“properties”在弹出的属性对话框中设置“Text file encoding”选项)2. 打开新建的*.js文件,输入: “要转换的汉字”.3. 按下Ctrl+Shift+F 或右键点击文件内容从弹出菜单中选择“FormatDocument”选型,效果出来了。

总结:必须将汉字放到””中间,否则不转换.^_^第二种办法:JAVA程序实现法public class CharacterSetToolkit {/**Creates a new instance of CharacterSetToolkit*/public CharacterSetToolkit() {}private static final char[] hexDigit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};private static char toHex(int nibble) {return hexDigit[(nibble & 0xF)];}/***将字符串编码成Unicode。

*@param theString待转换成Unicode编码的字符串。

浅析Java编程的中文问题及解决方法

浅析Java编程的中文问题及解决方法
- — —
并增 加 :
9 .— 4 . —
维普资讯
《 农业网络信息)O6 2O 年第 3 应 用实践 期
[in] c et l
d fu - h rce- e= b ea h c aa tr st g k
解决 Srl 的编码 问题 , P的问题也就迎刃而解。 ev t e J S
该段代码定 义了一个 t h ee o i s 方法 ,该方 法首先 Cn 判 断数据参数 s vl t a e是否为空 ,为空则抛 出异常 。 r u 反 之则用 s vle t a 对象 的 gty 8 法提取 G K 内码并 r u e t 方 Be B 赋值给 svle ta r u 32 aa . Jv 程序与数据库之 间中文的处理 对 于几乎所有数据库 的 J B D C驱动程序 , 与数据 其
r t r t a u ; e u s v l e n r
2 问题 的分 析
计算机操作 系统最 初支持 的编码是单 字节字符 编
码, 因此 , 在计算机 中一切处理程序最 初都是 以单字 节 编码 为准进行处理。随后 ,微软提 出了 U i d n oe编码 , c Jv 语言即采用 了此种编码 , 内部一律用 U i d 码 aa 其 n oe c 来表示字符。 n oe U i d 是用两个字节表示一个字 符的字 c

isvle = u ) ft a = n U (r u
r t r l; e u nul n

es l e
{ s vle nwSr g t a e e y s t au= e tn(r l . t t r i sv u g B e (IO 8 9 1) G K ) “S 85 _ ” ” B ”; ,

中文乱码问题的解决

中文乱码问题的解决

Java 中文问题的初步认识
我们基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GB2312 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);
getBytes 方法用于将中文字符以“ISO-8859-1”编码方式转化成字节数组,而“GBK” 是目标编码方式。我们从以ISO-8859-1方式编码的数据库中读出中文字符串 s1 ,经过上述转换过程,在支持 GBK 字符集的操作系统和应用软件中就能够正确显示中文字符串 s2 。
dbstr1 = new String(dbbyte1);
在转换字符串时不采用系统默认编码方式,而直接采用“ GBK” 或者 “GB2312” ,在 A 和 B 两种情况下,从数据库取数据都没有问题。
II.处理方式与“取中文”相逆,先将 SQL 语句按系统缺省编码方式转化为字节数组,再按“ISO-8859-1”编码方式转化为 STRING ,最后送去执行,则中文信息可正确写入数据库。
I.用 JDBC 执行 SELECT 语句从服务器端读取数据(中文)后,将数据用 APPEND 方法加到 TextArea(TA) ,不能正确显示。但加到 List 中时,大部分汉字却可正确显示。
将数据按“ISO-8859-1” 编码方式转化为字节数组,再按系统缺省编码方式 (Default Character Encoding) 转化为 STRING ,即可在 TA 和 List 中正确显示。

java中文乱码解决之道(五)-----java是如何编码解码的

java中文乱码解决之道(五)-----java是如何编码解码的

java中⽂乱码解决之道(五)-----java是如何编码解码的在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运⾏过程中那些步骤在进⾏转码,在这些转码过程中如果⼀处出现问题就很有可能会产⽣乱码!下⾯LZ就讲述java在转码过程中是如何来进⾏编码和解码操作的。

编码&解码在上篇博客中LZ阐述了三个渠道的编码转换过程,下⾯LZ将结束java在那些场合需要进⾏编码和解码操作,并详序中间的过程,进⼀步掌握java的编码和解码过程。

在java中主要有四个场景需要进⾏编码解码操作:1:I/O操作2:内存3:数据库4:javaWeb下⾯主要介绍前⾯两种场景,数据库部分只要设置正确编码格式就不会有什么问题,javaWeb场景过多需要了解URL、get、POST的编码,servlet的解码,所以javaWeb场景下节LZ介绍。

I/O操作在前⾯LZ就提过乱码问题⽆⾮就是转码过程中编码格式的不统⼀产⽣的,⽐如编码时采⽤UTF-8,解码采⽤GBK,但最根本的原因是字符到字节或者字节到字符的转换出问题了,⽽这中情况的转换最主要的场景就是I/O操作的时候。

当然I/O操作主要包括⽹络I/O(也就是javaWeb)和磁盘I/O。

⽹络I/O下节介绍。

⾸先我们先看I/O的编码操作。

InputStream为字节输⼊流的所有类的超类,Reader为读取字符流的抽象类。

java读取⽂件的⽅式分为按字节流读取和按字符流读取,其中InputStream、Reader是这两种读取⽅式的超类。

按字节我们⼀般都是使⽤InputStream.read()⽅法在数据流中读取字节(read()每次都只读取⼀个字节,效率⾮常慢,我们⼀般都是使⽤read(byte[])),然后保存在⼀个byte[]数组中,最后转换为String。

在我们读取⽂件时,读取字节的编码取决于⽂件所使⽤的编码格式,⽽在转换为String过程中也会涉及到编码的问题,如果两者之间的编码格式不同可能会出现问题。

idea java 代码 unicode 转 中文

idea java 代码 unicode 转 中文

I. 介绍在计算机编程中,有时会遇到需要将Unicode字符转换为中文字符的情况。

Unicode是一种全球字符集,可以表示世界上所有的字符,包括各种语言的文字、标点符号、图形符号等。

而在Java代码中,要将Unicode转换为中文字符,可以通过一些方法来实现。

II. Java中的Unicode在Java中,Unicode字符以"\u"开头,后面跟着4个十六进制数字来表示一个字符。

中文字符“中”在Unicode中的表示为“\u4e2d”。

III. 实现方法1. 使用StringEscapeUtils可以通过Apache Commons Lang提供的StringEscapeUtils工具类来实现Unicode转中文的功能。

这个工具类中提供了unescapeJava()方法,可以将Java转义字符转换为普通字符。

示例代码如下:```String unicodeStr = "\\u4e2d\\u56fd";String chineseStr = StringEscapeUtils.unescapeJava(unicodeStr); System.out.println(chineseStr); // 输出结果为“我国”```2. 使用正则表达式还可以通过正则表达式来实现Unicode转中文的功能。

示例代码如下:import java.util.regex.Matcher;import java.util.regex.Pattern;public class UnicodeConverter {public static String unicodeToChinese(String unicode) { String reg = "\\\\u[0-9a-fA-F]{4}";Pattern pattern = Patternpile(reg);Matcher matcher = pattern.matcher(unicode);while (matcher.find()) {String ch = matcher.group();char c = (char) Integer.parseInt(ch.substring(2), 16); unicode = unicode.replace(ch, String.valueOf(c)); }return unicode;}public static void main(String[] args) {String unicodeStr = "\\u4e2d\\u56fd";String chineseStr = unicodeToChinese(unicodeStr); System.out.println(chineseStr); // 输出结果为“我国”}```IV. 总结通过上述两种方法,可以很方便地实现在Java代码中将Unicode字符转换为中文字符的功能。

如何解决Java中中文乱码问题

如何解决Java中中文乱码问题

如何解决Java中的中文乱码问题?一、中文问题的来源计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。

随着计算机的开展,为了适应世界其它民族的语言〔当然包括我们的汉字〕,人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统〔多数时间是操作系统〕默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。

Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。

我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。

所以,大局部的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。

如:中文Win2K默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是GBK的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312根底上扩充来的。

1由于Java语言内部采用UNICODE编码,所以在JAVA程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,那么显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。

同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行〔我们经常看到有人把在中文win2k上编写的JAVA程序,移植到英文Linux上运行〕。

Javagbk转utf-8

Javagbk转utf-8

Javagbk转utf-81、⽂件转码:使⽤脚本gbk转utf-8的脚本⽂件:#!/bin/bashFILE_SUFFIX="java xml html vm js"# FILE_SUFFIX="vm"file_names=""for x in $FILE_SUFFIXdofile_names=`find . -name "*.$x" | xargs file -I | grep -v utf-8 | awk -F " |:" '{print $1}'`for file_name in $file_namesdo# echo $file_nameiconv -f cp936 -t UTF-8 $file_name >$file_name".new" &&mv -f "$file_name.new" "$file_name"doneecho "$x ok"donefind . -name "*.xml" | xargs sed -i "" "/<?xml/s/GBK/UTF-8/g"find . -name "*.xml" | xargs sed -i "" "/<?xml/s/GB2312/UTF-8/g"echo "xml head is ok!"find . -name "pom.xml" | xargs sed -i "" "/<encoding>/s/GBK/UTF-8/g"find . -name "pom.xml" | xargs sed -i "" "/<encoding>/s/GB2312/UTF-8/g"find . -name "pom.xml" | xargs sed -i "" "/project.build.sourceEncoding/s/GBK/UTF-8/g"find . -name "pom.xml" | xargs sed -i "" "/project.reporting.outputEncoding/s/GBK/UTF-8/g"find . -name "pom.xml" | xargs sed -i "" "s/pop-vender-common-pageframe/pop-vender-common-pageframe-utf8/g" echo "pom.xml is ok!"find . -name "*.properties" | xargs sed -i "" "/input.encoding/s/GBK/UTF-8/g"find . -name "*.properties" | xargs sed -i "" "/output.encoding/s/GBK/UTF-8/g"echo "velocity properties is OK!"find . -name "strut*.xml" | xargs sed -i "" '/struts.i18n.encoding/s/GBK/UTF-8/g'echo "struts xml is ok!"find . -name "*.vm" | xargs sed -i "" "s/\/common\/js\/jdmsg\/jd-msg.js/\/common\/js\/jdmsg\/jd-msg-utf8.js/g" find . -name "*.vm" | xargs sed -i "" "/\/ui.datepicker.js/s/<script t/<script charset=\"GBK\" t/g"find . -name "*.vm" | xargs sed -i "" "/\/jquery-calendar.js/s/<script t/<script charset=\"GBK\" t/g"echo "vm is ok"echo "finished"# echo $file_names2、⽂件转码后,本地环境改成utf-8环境,可能会有部分乱码⽂件,⼿动修复3、含有中⽂js引⽤增加charset="gbk"如依赖:、4、打包编译编码:替换成UTF-85、xml设置格式:以前可能为gbk或gb2312,改成utf-86、web.xml转成UTF-8,请求拦截器字符编码如使⽤spring配置<!--Character Encoding filter(字符集拦截转换) --><filter><filter-name>charsetFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter>7、代码GBK使⽤主要是代码⾥⾯写死GBK⽅式如string.getBytes("GBK")替换8、jdurl配置编码增加<property name="charsetName" value="utf-8"/>避税分页中含有中⽂乱码如:jdurl的编码设置:<bean class="ponent.url.PopJdUrl"><property name="url" value="${pop-vender.login.address}"/><property name="charsetName" value="utf-8"/></bean>⼤概是这8条重点在后⾯:这时你会发现,页⾯的get请求请求服务器时还是会出现乱码,别慌,那是因为tomcat的编码你还没有设置.利⽤request.setCharacterEncoding("UTF-8");来设置Tomcat接收请求的编码格式,只对POST⽅式提交的数据有效,对GET ⽅式提交的数据⽆效!要设置GET的编码,可以修改server.xml⽂件中,相应的端⼝的Connector的属性:URIEncoding="UTF-8",这样,GET⽅式提交的数据才会被正确解码。

浅析Java编程的中文问题及解决方法

浅析Java编程的中文问题及解决方法

浅析Java编程的中文问题及解决方法作者:乔晓东来源:《数字化用户》2013年第22期【摘要】Java是由Sun Microsystems公司所开发的程序设计语言,至今已经有将近20年的历史,在这20年间Java取得了很大的发展并广泛应用于PC、数据中心、互联网等行业。

如今随着智能手机行业的发蓬勃发展再一次带给了Java巨大的应用空间。

本文对Java编程的中文问题进行了阐述,并提出了相关的解决方案。

【关键词】Java语言中文问题GB2312从客观上来看每个区域计算机信息交换所采取的字符编码集都是不同的。

一般情况下字符编码集都是按照长度来进行分类,主要包括了两类即单字节字符集(SBCS)以及双字节字符集(DBCS)。

Java主要是使用UNICODE编码,因此当Java在实际工作的过程中就会存在一个编码格式转换输入、输出的过程,这个过程是实施信息数据交换的重要过程,一旦出现问题就会使得中文出现乱码的情况,这给用户和开发者都会带来较为不利的影响,这也是Java编程中文问题的主要体现。

一、Java主要的编码方式如果要想解决Java编程所存在的问题首先要对Java主要的编码方式进行分析。

16位无符号型数据是Java中的主要字符数据,它同时包括了ASCⅡ集以及Unicode集,这也就为程序带来了相应的标准,给开发者带来了更大便利。

但是在Java处理信息数据的过程中基本上都是英文,事实上7位的ASCⅡ集已经足够使用,而采用Unicode集相对来说就占用了更大的储存空间,同时也让基于Java的软件的稳定性受到了一定程度的影响。

而Java编程的中文问题主要还是因为信息数据在字符转换过程中存在错误所导致的。

Java主要的编码方式包括了以下几种分别为:GB2312、Unicode、ISO8859-1、 GBK、GB1803-2000(GBKZK)以及UTF-8。

其中GB2312是一种较为典型的Java编码方式,并且有着较为广泛的使用,也被大多数用户所熟知,同时它与中文编码有着密切的联系[1]。

JAVA中文字符编码问题详解

JAVA中文字符编码问题详解

将控制台的字符编码设置为GBK,乱码问题解决。
(这里补充一点:eclipse的控制台编码是继承了workspace的设置的,通常控制台编码里没有GBK的选项而且不能输入。我们可以先在 workspace的编码设置中输入GBK,然后在控制台的设置中就可以看到GBK的选项了,设置好后再把workspace的字符编码设置改回utf- 8就是。)
现在在JSP文件中硬编码出现乱码的机会比较小了,因为大家都用了如eclipse的编辑器,基本上可以自动保证这几个编码设置的正确性。现在更多碰到的是在JSP文件中从其他数据源中读取中文字符所产生的乱码问题。
三、在JSP文件中读取字符文件并在页面中显示,中文字符显示为乱码。
比如,我们在JSP文件中使用以下代码:
可见,我们字符编码转换在第二步时出错了,UTF-8的字符串被当做GBK读入了内存中。
解决这个乱码问题有两种方法,一是把test.txt用GBK保存,则FileInputStream能正确读入中文字符;二是使用InputStreamReader来转换字符编码,如:
InputStreamReader sr = new InputStreamReader(new FileInputStream("D:\\test.txt"),"utf-8");
那么,在eclipse运行带中文字符的JAVA文件,控制台显示了乱码,是在哪一步转换错误呢?我们一步步来分析。
- 保存JAVA文件成UTF-8后,如果再次打开你没有看到乱码,说明这步是正确的。
- 用eclipse本身来编译运行JAVA文件,应该没有问题。
- System.out.println会把内存中正确的UNICODE字符编码成GBK,然后发到eclipse的控制台去。等等,我们看到在Run Configuration对话框的Common标签里,控制台的字符编码被设置成了UTF-8!问题就在这里。System.out.println已经把字符编码成了GBK,而控制台仍然以UTF-8的格式读取字符,自然会出现乱码。

java使用URLDecoder和URLEncoder对中文字符进行编码和解码

java使用URLDecoder和URLEncoder对中文字符进行编码和解码

java使⽤URLDecoder和URLEncoder对中⽂字符进⾏编码和解码摘要: URLDecoder 和 URLEncoder ⽤于完成普通字符串和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。

在本⽂中,我们以使⽤URLDecoder解决GET请求中⽂乱码问题为场景说明 URLDecoder/URLEncoder 的⽤法,并给出了 application/x-www-form-urlencoded MIME 字符串的编码规则。

⼀. URLDecoder/URLEncoder 使⽤场景概述 URLDecoder 和 URLEncoder ⽤于完成普通字符串和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。

在介绍 application/x-www-form-urlencoded MIME 字符串之前,我们先考虑如下场景,如下图所⽰: 我们知道,在我们向客户端发起请求时,浏览器会根据请求URL⽣成相应的请求报⽂发送给服务器。

在这个过程中,如果我们在浏览器中的地址栏中所输⼊的URL包含中⽂字符时,浏览器⾸先会将这些中⽂字符进⾏编码然后再发送给服务器。

实际上,浏览器会将它们转换为 application/x-www-form-urlencoded MIME 字符串,如下图所⽰: 更确切的,当URL地址⾥包含⾮西欧字符的字符串时,浏览器都会将这些⾮西欧字符串转换成application/x-www-form-urlencoded MIME 字符串。

在开发过程中,我们可能涉及将普通字符串和这种特殊字符串的相关转换,这就需要使⽤URLDecoder 和 URLEncoder类进⾏实现,其中:URLDecoder类包含⼀个decode(String s,String enc)静态⽅法,它可以将application/x-www-form-urlencoded MIME字符串转成普通字符串;URLEncoder类包含⼀个encode(String s,String enc)静态⽅法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

srcdir="${webapp.path}/WEB-INF/classes" classpathref="run.classpath">
<include name="com/**/*.java"/>
</javac>
分析:javac –encoding 参数
我们常常没有用到encoding这个参数。其实encoding这个参数对于跨平台的操作是很重要的。
如果没有指定encoding,则按照系统的默认encoding,gb平台上是gb2312,英文平台上是iso8859_1。
--java的编译器实际上是调用sun.tools.javac.main的类,对文件进行编译,这个类的compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。 编译器就是根据这个变量来读取java文件的,然后按照设定的encoding格式编译成class文件。
java中的byte / char 互转的函数在sun.io的包中。
public static bytetocharconverter getdefault() ;
public static bytetocharconverter getconverter(string encoding);
另外大家需要注意我们常用的应用服务器tomcat的默认编码格式:iso8859-1
定义位置:tomcat下的web.xml 第一行:
<?xml version="1.0" encoding="ISO-8859-1"?>
通常系统开发后,很多应用服务器都需要打包发布,首推工具当然是ant了(好东西啊!)。
[2]、当很多地方的同意个字符串需要修改时,只要改写一个地方就ok了
[3]、如果要求系统支持中英文转换,那么,只要在显示资源串时根据local判断就可以了
[4]、在编码转换上,有很好的平台移植性,不用每次都考虑服务器上的编码方式,本地的编码方式,然后再写n个转换库。性能是也会有一定的影响。
分析:String和byte[]
String其实核心是char[],然而要把byte转化成String(或者String --- > byte),必须经过编码。 string.length()其实就是char数组的长度,如果使用不同的编码,很可能会错分,造成散字和乱码。就好像上面例子中,错用javac –encoding ios8859-1 testEncoding.java 后,运行后文件中显示 “??” 一样。
当然你也可以根据自己的需要设定自己的格式,但一定要统一(否则,有很多问题会找你的)。
选择UTF-8原因:大部分浏览器ie其高级设置中始终以utf-8发送url的选项缺省是选上的。
以我们的系统举例,我们用Eclipse来开发系统平台,开发时,通常为了修改bug,都要在本地直接用本地源代码进行系统发布,如果此时在java中直接写中文,在中文系统是没问题,但如果用设定了utf-8的ant编译后,就会出现中文,因为Eclipse默认的编码方式是GBK,就像我在第一个例子中说的那样
分析:reader,writer / inputstream,outputstream
reader和writer核心是char,inputstream和outputstream核心是byte。但是reader和writer的主要目的是要把char读/写inputstream/outputstream 。这里用不同的编码格式会对结果造成不一样的影响。
</copy>
</target>
在我现在工作的系统中,jsp全部通过
<%@page contentType="text/html;charset=UTF-8"%> 指定编码方式
从上到下,我们整个系统无论在页面,编译,都采用相同的编码格式(UTF-8)
<!--================================================================ -->
<target name="compile.java" depends="prepare">
<javac encod来自ng="${encoding}" destdir="${build.dir}/WEB-INF/classes" debug="on" deprecation="off" optimize="off"
如果你向converter指定encoding ,则系统会自动使用当前的encoding, gb平台上用gbk ,en平台上用 8859_1 。
下面,是我在中文xp系统下的一段代码:
import java.io.FileWriter;
import java.io.IOException;
总结:
如果我们只是自己写一个或2个文件,那编码格式无所谓,怎么解决都可以,但是,对于开发人员,我们面对的通常都是一个庞大的系统,快平台也是很正常的,所以在编码格式上很难全局控制,一个企业化的解决方案就是,在系统中,无论html,jsp,java,只要是中文,都不要直接输入,采用资源串的方式来编写。这样才能形成真正的产品。
3、 写n个转换库,对编码格式进行转换
4、 (很多服务器,例如 HPUnix,经常需要设定服务器的环境变量,以处理编码)
优点:写的时候很方便,改的时候也可以
缺点:跨平台性差,不能全局替换�
也许你要问为什么?这就是我下面要和大家讨论的。
首先,大家要清楚java的内核是unicode的,就连class文件也是,然后,日常应用中很多都是使用字节流的,包括文件流的保存方式。因此java要对此进行转换。
char ---------- unicode
byte ---------- 字节
在用ant编译系统时,设定编码方式:
<!-- ================================================================ -->
<!--Compiles the java source code in the local -->
<copy todir="${build.dir}/WEB-INF/classes/com/neusoft/ehr/replets/standard">
<fileset dir="${src.dir}/WEB-INF/classes/com/neusoft/ehr/replets/standard" includes="**/*.srt"/>
write.write(str);
write.close();
}catch(IOException e){
System.out.println("has not found test.txt file !");
public class testEncoding {
public void test(){
String str = "你";
try{
FileWriter write=new FileWriter("test.txt");
}
}
//javac -encoding gbk/iso8859-1/utf-8 [常用的编码方式]
//测试结果,默认不用-encoding编译 和 选用 -encoding gbk 都是正常显示 “你”;
//如果用 -encoding utf-8/ios8859-1 则显示乱码 “??”
javac -encoding gbk/utf-8 显示出了不同。
不用资源串的项目事例:
在此,也多提一下,曾经在上海财大,我们公司其他部门的兄弟们作了个系统,也是很大的系统,但是整个系统都没有采用资源串,直接用中文,他们采取的方法大概是:
1、 获得服务端的编码方式
2、 获得客户端的编码方式
Java中文编码转换分析
通常,我们遇到中文问题的来源一般都是,在jsp等显示到页面时,出现问题。
若想知道为什么出现乱码,就要从了解jsp --- > servlet --- > class 开始
其实,问题主要在 servlet --- > class 上,也就是 javac <*.java> 文件时出现了问题,
}
}
public static void main(String[] args){
testEncoding instance = new testEncoding();
instance.test();
中文/英文资源串 可以利用 java.util. Properties; 来处理 。
如果你的系统支持struts, 也可以利用 org.apache.struts.util.MessageResources来处理 。
利用资源串处理中英文字符问题还有另外4个好处:
[1]、很多地方的资源串都是可以重复使用的(当然,为了模块独立,不同模块就算同样的字符也建议在不同的资源串文件写)
相关文档
最新文档