java中UTF8转GBK

zhoucd_dl 2007-11-13 06:40:38
我们现在开发的web系统是使用struts2+spring+hibernate,我们想使用struts2中带的ajax控件,但是这些控件提交到后台的数据都是UTF-8编码的,比如:我在前台的文本框中输入 你好 ,在后台的action中打印出的是 你好
试了很多的编码方式,都没有转化了
System.out.println("1 - zxm = "+this.tabForm.getZxm());
System.out.println("2 - zxm = "+new String(this.tabForm.getZxm().getBytes("ISO-8859-1"),"UTF-8"));
System.out.println("3 - zxm = "+new String(this.tabForm.getZxm().getBytes("GBK"),"UTF-8"));
System.out.println("4 - zxm = "+new String(this.tabForm.getZxm().getBytes("UTF-8"),"ISO-8859-1"));
System.out.println("5 - zxm = "+new String(this.tabForm.getZxm().getBytes("UTF-8"),"GBK"));
System.out.println("6 - zxm = "+new String(this.tabForm.getZxm().getBytes("UTF-16BE"),"GBK"));
String gbkString = IOUtils.toString(IOUtils.toInputStream(this.tabForm.getZxm(), "UTF-8"));
System.out.println("gbkString = "+gbkString);
String urlString = URLDecoder.decode(URLEncoder.encode(this.tabForm.getZxm(),"GBK"),"GBK");
System.out.println("urlString = "+urlString);
上面的转码有些明显是错误的,望大家不要见笑。
后台打印结果
1 - zxm = 你好
2 - zxm = 你好
3 - zxm = 你好
4 - zxm = 你好
5 - zxm = 你好
6 - zxm = 你好
gbkString = 你好
urlString = 你好

难为高人帮着解决一下,用什么办法把UTF-8的转成GBK 的哈?!
谢谢!!!

...全文
10705 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
LZ!解决了没有?我也遇到同样的问题!无耐!
zhoucd_dl 2007-11-15
  • 打赏
  • 举报
回复
自己顶
zhoucd_dl 2007-11-14
  • 打赏
  • 举报
回复
ret = java.net.URLDecoder.decode(s, "utf-8");

试了,没有转换。

我想因为我在action得到的字符已经是你好 ,而不是类似???这样的乱码,所以使用类似这种的转码方式应该是不行的。

另,HITCCBoy的方法,还没有试,不过我在这个项目中已经利用struts2自身的拦截器器配置了转码,
<constant name="struts.i18n.encoding" value="GBK"/>
他的实现方式,和HITCCBoy的方式是类似的。

资料中介绍struts2中使用的ajax是集成了DWR和JSON,这个JSON在传递数据时,对于非西欧的字符都是使用UTF-8编码的,所以可以从这个方面来考虑一下;
或者jdk中有一个GBK和UTF-8转换的命令,不过是在Dos中执行的,java中怎么使用呢?
harston 2007-11-14
  • 打赏
  • 举报
回复
HITCCBoy的方法应该可以,这个需要解码
FAT0708 2007-11-14
  • 打赏
  • 举报
回复

/**
* UTF-8编码转中文
*
* @param s
* @return
*/
public static String utf8ToStr(String s) {
String ret = "null";
try {
ret = java.net.URLDecoder.decode(s, "utf-8");
} catch (UnsupportedEncodingException ex) {
}
return ret;
}

试试。
zhoucd_dl 2007-11-14
  • 打赏
  • 举报
回复
用DB2312试试!!
new String(rinm.getBytes( "ISO8859_1 "), "GBK ");

试了,也不行
HITCCBoy 2007-11-14
  • 打赏
  • 举报
回复
用这个方法试一试
定义一个类
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class SetCharacterEncodingFilter implements Filter {

/*
* (非 Javadoc)
*
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {

this.encoding = null;
this.filterConfig = null;

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 选择使用的字符编码
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);

}
// 将控制权交给下一个Filter
chain.doFilter(request, response);
}

}

// 将这个filter放置在服务中
/*
* (非 Javadoc)
*
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;

}

protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}

protected String encoding = null;

protected FilterConfig filterConfig = null;

protected boolean ignore = true;

}
在web.xml文件中加入以下代码
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
<init-param>
<param_name>encoding</param_name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url_pattern>/*</url_pattern>
</filter-mapping>
zhoucd_dl 2007-11-14
  • 打赏
  • 举报
回复
将你前台页面编码也改成UTF-8

以前的系统页面都是用GBK的,而且oracle库的编码也是GBK的,现在的新系统要和以前的系统相兼容,所以,页面和数据库的编码集都不能改为UTF-8的。
熊猫哥123 2007-11-13
  • 打赏
  • 举报
回复
将你前台页面编码也改成UTF-8
yuanjun_xf 2007-11-13
  • 打赏
  • 举报
回复
用DB2312试试!!
new String(rinm.getBytes("ISO8859_1"),"GBK");

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧