gb2312编码问题

keelsike 2006-08-07 03:18:00
class Test
{
public static void main(String[] args)
{

//这里的java源文件是用的utf-8编码

//GBK可成功转换并转回去,用IE来看的话选GB2312可以看到第一个和第三个(test中文test涓枃test中文),选UTF-8可看到第二个(test֐΄test中文test֐΄)
String s = "test中文";
try {

String s2 = new String(s.getBytes("UTF-8"),"gbk");

String s3 = new String(s2.getBytes("gbk"),"UTF-8");

System.out.println(s+"|"+s2+"|"+s3);
FileWriter f = new FileWriter("e:/ttt.htm");
PrintWriter out = new PrintWriter(f);
out.print(s);
out.print(s2);
out.print(s3);

out.close();
f.close();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//===================================================
////GB2312同样的写法且得出来除第一个外,其他均错:test中文|test涓????|test?????

String s = "test中文";
try {

String s2 = new String(s.getBytes("UTF-8"),"gb2312");

String s3 = new String(s2.getBytes("gb2312"),"UTF-8");

System.out.println(s+"|"+s2+"|"+s3);
FileWriter f = new FileWriter("e:/ttt.htm");
PrintWriter out = new PrintWriter(f);
out.print(s);
out.print(s2);
out.print(s3);

out.close();
f.close();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//===================================================

}
}
...全文
341 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
keelsike 2006-08-08
  • 打赏
  • 举报
回复
//在过滤器加加一条:
if (request.getParameter("encode") != null) {
//里面什么事情都不做
}



//在servlet中
if (request.getParameter("encode") != null) {
isGBK = true;
}

...
if (isGBK) {
txtContent = new String(request.getParameter("zxContent").getBytes("ISO-8859-1"), "GBK");
}

搞定!
经过了一番艰苦的测试...终于能将gbk编码和utf8编码同时处理了,其中gbk的页面需要在表单中加一个<input name="encode" type="hidden" value="gbk" />
keelsike 2006-08-08
  • 打赏
  • 举报
回复
就是不知道为什么过滤器必须要
if (request.getParameter("encode") != null) {
//里面什么事情都不做
}

才能行,去掉之后就不行了.
jacky_majia_001 2006-08-08
  • 打赏
  • 举报
回复
专业帮顶
jackzhangyunjie 2006-08-07
  • 打赏
  • 举报
回复
可以使用过滤器在doGet方法中添加如下代码:
HttpServletRequest req = (HttpServletRequest)request;
req.setCharacterEncodint("gb2312");
keelsike 2006-08-07
  • 打赏
  • 举报
回复
用不着再搬出楼上再篇老文章.不是一般乱码问题.

其实问题很简单,如何在servlet同时正确处理两种不同的客户端编码形式,gb2312和utf-8.

rickhunterchen 2006-08-07
  • 打赏
  • 举报
回复
解决web开发中的中文问题
http://www.blogjava.net/rickhunter/articles/33571.html
keelsike 2006-08-07
  • 打赏
  • 举报
回复
无论POST或是get,在本站范围内访问都是正确的.所有编码均采用UTF-8.

但现在如果浏览器强制设置成GB2312,或是在其他的网站有GB2312页面,需要发送到本站的servlet,这个servlet如何同时正确解析这两种客户端编码post或者get过来的数据?WEB容器已经配置成所有请求均按UTF-8处理.
  • 打赏
  • 举报
回复
用过滤器只能解决post的问题,get的话要修改容器的配置比如tomcat就有一个参数URIEncoding要将它修改成你所希望的字符集,但是URL参数里出现中文不好,可能在客户端会出现各种问题,所以如果有中文建议将参数编码为%**这样的形式。
keelsike 2006-08-07
  • 打赏
  • 举报
回复
现在是客户端大部分是UTF-8请求,但也有少数gbk,过滤器可以解决吗?
OnlyFor_love 2006-08-07
  • 打赏
  • 举报
回复
加个过滤器不行吗? 负责将服务器端的字符转换成gbk传给客户端
相反的就是将客户端的转换成utf-8传给server
keelsike 2006-08-07
  • 打赏
  • 举报
回复
也就是说:
现在WEB容器错误地将gbk用utf-8读出来了,相当于new String(str..getBytes("gbk"),"UTF-8");

请问如何返回到最初的gbk状态?
keelsike 2006-08-07
  • 打赏
  • 举报
回复
我在SERVER端的TOMCAT上全用的utf-8编码,JSP上面也用了utf-8编码,系统运行很正常,无论是GET或者POST都能正常显示中文.

现在有一个新的需求:其他网站,一般是GB2312编码的,要调用我这边的一个SERVLET,我的想法是加一个参数来判断,如果存在这一参数,则试着将值从GB2312转到UTF-8,但无论怎么写好像都不行,而且还发现了上面这个问题,请高人指点!

81,094

社区成员

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

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