我们在使用Ejb时,有时候读取出来的数据或者往数据库中插入数据时显示为乱码,这真是件让人郁闷的事,不过最近我找了一种很好处理的方法,也供给大家参考下:
如果要将数据从数据库中读出来的时候要将编码从ISO8859_1转换为GBK:就调用ISO2GBK(String a)方法。
如果是将数据插入到数据库中就将编码从GBK转换为ISO8859_1:就调用GBK2ISO(String b)方法。
public class EncodingConvert {
public String ISO2GBK(String s){
String ns = null;
if (s == null)
return ns;
byte[] nbyte = s.getBytes();
//先判断是否为GBK编码,是就不用转了
if(nbyte.length>1 && isGBK(nbyte[0],nbyte[1]))
return s;
//转码
try {
ns = new String(s.getBytes("iso8859_1"), "GBK");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
return ns;
}
/**
* 将字符串从GBK转换成ISO
* @param s String
* @return String
*/
public String GBK2ISO(String s){
String ns = null;
if (s == null)
return ns;
byte[] nbyte = s.getBytes();
//先判断是否为GBK编码,不是就不用转了
if(nbyte.length>1 && (!isGBK(nbyte[0],nbyte[1])))
return s;
try {
ns = new String(s.getBytes("gbk"), "ISO-8859-1");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
return ns;
}
/**
*
* 判断字符串是否是GBK编码
* @param head byte
* @param tail byte
* @return boolean
*/
public boolean isGBK( byte head,byte tail ){
int iHead = head & 0xff;
int iTail = tail & 0xff;
return ((iHead>=0x81 && iHead<=0xfe &&
(iTail>=0x40 && iTail<=0x7e ||
iTail>=0x80 && iTail<=0xfe)) ? true : false);
}
/**
* 判断字符串是否为GB2312编码
*
* @param head byte
* @param tail byte
* @return boolean
*/
public boolean isGB2312( byte head,byte tail ){
int iHead = head & 0xff;
int iTail = tail & 0xff;
return ((iHead>=0xa1 && iHead<=0xf7 &&
iTail>=0xa1 && iTail<=0xfe) ? true : false);
}
}
分享到:
相关推荐
### Java字符编码转换详细过程 #### 一、Java程序的生命周期与字符编码处理流程 Java程序的生命周期可以概括为三个主要阶段:编写源代码、编译源代码以及运行编译后的类文件。在这个过程中,涉及到多种字符编码的...
Java实现的字符编码转换程序,基于Bean的封装实现,程序通过Client触发调用Bean方法,取得Home对象的引用,然后用EJB生成库Home生成EJB对象,调用EJB对象方法printHelloWorld(),EJB对象把调用委派给Bean,同时程序...
因此,在Java程序运行时,需要将Unicode编码转换为操作系统默认支持的编码格式,这就存在着一个从Unicode编码到对应的操作系统及浏览器支持的编码格式转换、输入、输出的问题。 二、Java中文编码问题的分析 Java...
解决Java中文乱码问题的关键在于理解和控制每个阶段的字符编码转换。以下是一些最佳实践: 1. **源文件编码**:明确指定IDE或文本编辑器保存源文件时使用的编码,如在Eclipse中设置项目编码为GBK或UTF-8。 2. **...
Java编程语言在处理中文字符时可能会遇到乱码问题,这是由于计算机系统和Java自身编码机制之间的...开发者应关注源代码的编码设置、文件读写和网络通信中的编码转换,以确保Java程序在各种环境下都能正确处理中文字符。
- `java.nio.charset`包提供了字符编码转换的功能,如`CharsetDecoder`和`CharsetEncoder`。 总的来说,解决Java中的中文问题需要对字符编码有深入理解,并在代码编写、编译和运行的各个阶段都考虑到编码的正确性...
- **编码转换**:使用`new String(byte[], "目标编码")`进行编码转换,例如: ```java String gb2312Str = "你好"; byte[] isoBytes = gb2312Str.getBytes("GB2312"); String isoStr = new String(isoBytes, ...
在运行过程中,Java虚拟机(JVM)会根据不同的环境进行编码转换。例如,在输出中文字符时,JVM会尝试将UNICODE编码的字符转换为当前环境支持的编码格式,以便于正确显示。 #### 三、中文乱码的常见场景 - **跨平台...
总之,Java编程中的乱码问题需要开发者对字符编码有深入的理解,并且在各个层次——从文件读写到网络传输,从数据库到Web容器——都做好编码的适配和转换工作。只有这样,才能有效地避免和解决乱码问题,保证程序的...
总之,Java编程中的乱码问题主要是由于Unicode编码与系统默认编码的转换不当导致的,理解和掌握编码原理以及Java程序的生命周期中的编码转换过程,是解决这类问题的关键。开发者应当注意在各个阶段保持编码的一致性...
在Web开发中,尤其是使用Java Server Pages (JSP)进行开发时,处理中文字符常常会遇到乱码问题。本文将详细探讨如何有效地解决JSP页面中的中文问题,确保用户界面能够正确地显示中文内容。 #### JSP页面中文问题的...
过滤器(Filters)可以对HTTP请求和响应进行预处理和后处理,如字符编码转换、权限检查等。 这些技术的综合运用能够构建出高效、可维护的企业级Web应用。对于初学者来说,逐步学习和实践这些知识,将有助于提升技能...
编码转换可以通过`new String(bytes, "GB2312").getBytes("ISO-8859-1")`这样的方式实现,将源字符串的编码转换为目标编码。 【数据库访问】 访问数据库通常涉及JDBC,`Statement`用于执行静态SQL,而`...
编码转换可通过Charset类进行,例如将GB2312编码的字符串转换为ISO-8859-1编码。 访问数据库通常使用JDBC,Statement用于执行静态SQL,PreparedStatement支持预编译的SQL,能防止SQL注入,更安全。 【JSP&Servlet...
21. Java中的字符编码处理 - 字符串的编码转换处理,例如将字符串从ISO-8859-1编码转为GBK编码。 这些知识点构成了Java程序员面试时通常会遇到的问题范畴,涵盖了从基础到高级主题的广泛内容。掌握这些知识点对于...
- 使用Charset类进行编码转换,如new String(byte[], charset)。 7. **数据库访问**: - Statement用于执行静态SQL,PreparedStatement用于预编译和参数化SQL,更安全且性能更好。 8. **JSP&Servlet**: - JSP...
在Java中,编码转换可以使用`InputStreamReader`和`OutputStreamWriter`类,它们允许指定编码格式。例如,将GB2312编码的字符串转换为ISO-8859-1编码的字符串,可以通过读取源编码的字符串,然后以目标编码写入新...
- **问题**:如何将一个字符串从GB2312编码转换为ISO-8859-1编码? - **解释**:可以通过 `new String(bytes, charsetName)` 构造函数实现编码的转换。例如,先将GB2312编码的字符串转换为字节数组,然后再使用ISO...