new String转码问题

openlqh1990 2012-12-14 01:21:12
byte nativeBytes[]=sInput.getBytes("gb2312")

String nativeStr = new String(nativeBytes, 0, nativeBytes.length, "GB2312");

为什么nativeStr得到的是空白?

sInput,nativeBytes都对的。
sInput是从jsp传过来的,这是在JAVA文件里。为什么会出现错误?
sInput不是从jsp传过来,如果是直接在本java文件里调用,出现的结果是对的,为什么?
...全文
354 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
makesoy1 2012-12-15
  • 打赏
  • 举报
回复
看看我们平时自己写过滤器的方法怎么写,借鉴一下
public void doFilter(ServletRequest request, ServletResponse response,             FilterChain chain) throws IOException, ServletException {         //设置请求编码         HttpServletRequest req=(HttpServletRequest)request;         if(req.getMethod().equalsIgnoreCase("post")){             req.setCharacterEncoding("UTF-8");         }else{             Map map=req.getParameterMap();             if(map.size()>0){                 Collection values=map.values();                 Iterator it=values.iterator();                 while (it.hasNext()) {                     String[] object = (String[]) it.next();                     for (int i = 0; i < object.length; i++) {                         object[i]=new String(object[i].getBytes("iso8859-1"),"UTF-8");                     }                                       }             }         }         //设置响应编码         response.setContentType("text/html;charset=UTF-8");         chain.doFilter(request, response);               } 

openlqh1990 2012-12-14
  • 打赏
  • 举报
回复
引用 7 楼 hucp2007 的回复:
换UTF-8编码试试
还是有问题,换编码也一样的换GBK也一样的错误。
笑莫问 2012-12-14
  • 打赏
  • 举报
回复
换UTF-8编码试试
openlqh1990 2012-12-14
  • 打赏
  • 举报
回复
引用 5 楼 hucp2007 的回复:
测试过了,这两句在java代码中执行没问题,贴后台代码吧
public static String getResultNoPOS(String sInput) { try { System.out.println("enter the getResultNoPOS"); ICTCLAS50 testICTCLAS50 = new ICTCLAS50(); String argu = "."; //初始化 if (testICTCLAS50.ICTCLAS_Init(argu.getBytes("gb2312")) == false) { //System.out.println("Init Fail!"); //return null; } //设置词性标注集(0 计算所二级标注集,1 计算所一级标注集,2 北大二级标注集,3 北大一级标注集) testICTCLAS50.ICTCLAS_SetPOSmap(2); System.out.println(sInput); System.out.println(sInput.getBytes("gb2312")); //这里转码问题 byte nativeBytes[] = testICTCLAS50.ICTCLAS_ParagraphProcess(sInput.getBytes("gb2312"), 0, 0);//分词处理 //System.out.println(nativeBytes.length); System.out.println(nativeBytes); //转码回去有问题 String nativeStr = new String(nativeBytes, 0, nativeBytes.length, "GB2312"); //System.out.println("没添加词性标注的分词结果: " + nativeStr);//打印结果 System.out.println(nativeStr); testICTCLAS50.ICTCLAS_Exit(); System.out.println("exit the getResultNoPOS"); return nativeStr; } catch (Exception ex) { return null; } } 主要就是这一段代码,在JAVA中调用是对的,在JSP传过来就出来空白。
笑莫问 2012-12-14
  • 打赏
  • 举报
回复
测试过了,这两句在java代码中执行没问题,贴后台代码吧
鸡肋啊 2012-12-14
  • 打赏
  • 举报
回复
sInput从jsp传值到后台的代码在哪里? 后台有调试看过sInput的值是什么吗?
openlqh1990 2012-12-14
  • 打赏
  • 举报
回复
引用 1 楼 zxhcloth 的回复:
两种可能: 1、sInput的编码并不是gb2312 2、sInput.getBytes("gb2312")返回长度为0的byte
<%@ page contentType="text/html;charset=gb2312" import="java.sql.*"%> <%@ page import="hdu.edu.test.*"%> <html><body> <div align="center"> <h2>您好,回答如下:</h2> <% double n1=0.0,n2=0.0; String s1="浙江绍兴人"; String s2="浙江温州人"; //n1=easy.acc(s1,s2); //out.println(n1); n2=new SentenceSimilarity().last(s1, s2); out.println(n2); %> <br> <br> <div align="center"><a href="login.jsp"><font size=1>返回继续提问</font></a></div> </div> </body></html> 这是JSP代码,这里的S1就是sInput
openlqh1990 2012-12-14
  • 打赏
  • 举报
回复
引用 1 楼 zxhcloth 的回复:
两种可能: 1、sInput的编码并不是gb2312 2、sInput.getBytes("gb2312")返回长度为0的byte
在JSP页面上设置的编码是GB2312 sInput.geyBytes("gb2312")不是0,我输出看过,是正确的byte。
zxhcloth 2012-12-14
  • 打赏
  • 举报
回复
两种可能: 1、sInput的编码并不是gb2312 2、sInput.getBytes("gb2312")返回长度为0的byte

81,092

社区成员

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

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