知识大全 分析 Java 中乱码问题产生的根源
Posted 字节
篇首语:没有加倍的勤奋,就既没有才能,也没有天才。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 分析 Java 中乱码问题产生的根源相关的知识,希望对你有一定的参考价值。
分析 Java 中乱码问题产生的根源 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
最近用到了字符串的压缩 用到了GZipInputStream和GZipOutputStream 再次遇到了阔别已久的中文乱码问题 看了一些相关的文章 觉得我们之所以会遇到这样那样的乱码问题 基本上都是由于我们在某些地方隐含了byte到char的转换 而这种隐含的转换采用的是iso 的编码进行的 以jsp页面中文传递为例子 假设客户端的编码是GB 表单中的中文提交后 首先根据GB 编码转换为字节流 到达服务器端后 如果我们直接在servlet中调用request getParameter(String name)等方法 由于方法返回的是String 对象 所以其中必然隐含了一次从byte到char的转换 错误也就是在这里产生的 如果这次转换采用的编码是iso 得到的当然是乱码 public class Login extends HttpServlet private static final String CONTENT_TYPE = text/; charset=UTF ; //Initialize global variables public void init() throws ServletException //Process the HTTP Get request public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException String name = request getParameter( userid );//隐含的转换 name = new String(name getBytes( iso ) GB );//还原字节 重新构造 response setContentType(CONTENT_TYPE); PrintWriter out = response getWriter(); out println( <> ); out println( <head><title>Login</title></head> ); out println( <body bgcolor=\\ #ffffff\\ > ); out println( <p>The servlet has received a GET This is the reply </p> ); out println( </body> ); out println( </> ); out close(); 幸好 以iso 进行的默认转换不会损失字节 也不会增加字节 我们只要按照iso 的方式返回原来的字节数组 重新按照GB 的方式进行byte 到char的转换就可以了 再以压缩流为例(文件流实际上也是一样的) public String unpress(byte[] cmp) String ret = ; int i; byte[] buf = new byte[ ]; try /** *新的方式 始终保持以字节为核心 最后再按照合适的编码进行组装 */ BufferedInputStream bis = new BufferedInputStream(new GZIPInputStream(new ByteArrayInputStream(cmp))); /** * 以前的方式 * 在 new InputStreamReader()的时候发生了隐含的byte到char的转换 导致之后出来的都是乱码 */ // BufferedReader bis = new BufferedReader(new InputStreamReader(new // GZIPInputStream(new // ByteArrayInputStream(cmp)))); ByteArrayOutputStream baos = new ByteArrayOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(baos); while ( (i = bis read(buf)) > ) bos write(buf i); bos close(); baos close(); bis close(); ret = new String(baos toByteArray());//用平台默认的编码进行组装 我是GB catch (IOException ex) ex printStackTrace(); return ret; reader是以字符为核心 inputStream是以byte为核心的 当他们转换的时候就会进行byte到char的转换 所以我们要注意自己的调用的顺序 我们如果今后再遇到乱码的问题 就去找找自己是不是什么地方进行了隐含的byte到char的转换 cha138/Article/program/Java/hx/201311/26652相关参考
[Java]部分乱码问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前些日子QQ群里面的某个
解决java中文乱码cd/usr/lib/jvm/javasun/jre/lib/fontssudomkdirfallbackcdfallbacksudocp/usr/share/fonts/true
Java编程技术中汉字问题的分析及解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在基于Ja
代码如下 <Connectorport=""protocol="HTTP/"connectionTimeout=""redirectPort=""/><Connecto
JavaStruts1.2中文乱码处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 建立文件继
知识大全 Linux下java的Swing/AWT程序乱码解决
Linux下java的Swing/AWT程序乱码解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
解决方法一: mysql安装时候的编码 看下myini有无 [mysql] defaultcharacterset=utf [client]defaultcharacterset=utf
JSP中使用request乱码问题的解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
在人格特质理论中,用因素分析的方法,提出16种相互独立的根源物质的心理学家是
在人格特质理论中,用因素分析的方法,提出16种相互独立的根源物质的心理学家是_____。A、卡特尔B、吉尔福特C、奥尔波特D、斯普兰格答案:A解析:雷蒙德.卡特尔对人格特质理论的主要贡献在于提出了根源
JSP虚拟主机使用中的乱码问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!