文件管理 · 2022年8月16日

servlet下载文件乱码|Javaweb返回给Android客户端json中文字符乱码

A. javaweb返回给Android客户端json中文字符乱码

JavaWeb的各种中文乱码终极解决方法:一、Servlet输出乱码1.用servlet.getOutStream字节流输出中文,假设要输出的是Stringstr="测试中文"。1.1若是本地服务器与本地客户端这种就不用说了,直接可以out.write(str.getBytes())可以输出没有问题。因为服务器中用str.getBytes()是采用默认本地的编码,比如GBK。而浏览器也解析时也用本地默认编码,两者是统一的,所以没有问题。1.1若服务器输出时用了,out.write(str.getBytes("utf-8"))。而本地默认编码是GBK时(比例在中国),那么用浏览器打开时就会乱码。因为服务器发送过来的是utf-8的1010数据,而客户端浏览器用了gbk来解码,两者编码不统一,肯定是乱码。当然,你也可以自己将客户端浏览器的编码手工调用下(IE菜单是:查询View->编码encoding->utf-8),但是这种操作很烂,最好由服务器输出响应头告诉,浏览器用哪种编码来解码。所以要在服务器的servlet中,增加response.setHeader("content-type","text/html;charset=utf-8"),当然也可直接用简单的response.setContentType("text/hmtl;charset=utf-8")。两种的操作是一样一样的。2.用servlet.getWirter字符流输出中文,假设要输出的是Stringstr="测试中文乱码"。2.1若写成out.print(str)输出时,客户端浏览器显示的将全是多个?????的字符,代表在编码表中肯定就找不到相应的字符来显示。原因是:servlet.getWriter()得到的字符输出流,默认对字符的输出是采用ISO-8859-1,而ISO-8859-1肯定是不支持中文的。所以肯定要首先要做的第一件事:是要将服务器对象输出字符能支持中文的。其次服务器向客户端写回的响应头要告诉客户端是用了哪种编码表进行编码的。而实现这两个需求,只需要response.setContentType("text/hmtl;charset=utf-8")。就搞定了。特别注意:response.setContentType("text/html;charset=utf-8")要放在PrintOutout=response.getWriter()代码的前面,否则只是有告诉客户端用什么码表编码的功能,而服务器端还是用ISO-8859-1编码了。再特别提示下:在同一Servlet中的doGet或doPost方法中,不能既用response.getOutputStream又用response.getWriter,因为这两种response的响应输出字节流与字符流是冲突的,只能用其一。二、Servlet文件下载,中文乱码情况。关键是下载时响应头content-disposition中attachment;filename=文件名。这个文件名filename不能是含有中文字符串的,要用URLEncoding编码进行编码,才能进行进行http的传输。三、Servlet的response增加addCookie,cookie中value的中文码问题解决方法。若想将cookie中存放中文的值,必须用Base64编码后,发给客户浏览器端进入存储。而下次客户端浏览访问是带回来的cookie中的值,是经过Base64编码的,所以需要用Base64解码即可。Base64编码主要是解决将特殊字符进行重新编码,编码成a-b、A-B、0-9、+与/,字符52,10个数字与一个+,一个/共64个字符。它的原理是将原来3个字节的内容编码成4个字节。主要是取字节的6位后,在前面补00组成一个新的字节。所以这样原来的3个字节共24,被编码成4个字节32位了。四、获取请求参数乱码GET方式的乱码:如<ahref=”/demo5/servlet/RD2?name=中国”>CN</a>,直接用request.getParameter得到的字符串strCN将会乱码,这也是因为GET方式是用http的url传过来的默认用iso-8859-1编码的,所以首先得到的strCn要再用iso-8859-1编码得到原文后,再进行用utf-8(看具体页面的charset是什么utf-8或gbk)进行解码即可。newString(strCn.getBytes(“ISO-8859-1”),“UTF-8”);

B. servlet在网页上出现的乱码怎么样解决

恩解决思路1.页面乱码content-type=‘text/html’;charset=“utf-8”;2.如果有数据库操作,看数据库是否乱码 3.页面请求传递参数 是否进行了转码4.servlet里面设置request.setCharacterEncoding("utf-8"); 如果是向页面写内容 需要设置response.setCharacterEncoding("utf-8");5.工程是否是utf-86.如果是地址栏传递参数 可以设置tomcat–>conf—>server.xml—>找到默认端口里 加入UrlEncoding=“utf-8”;7.其他 例如ajax等乱码 要区别对待 具体问题具体分析。以上是我解决乱码问题的思路。

C. 从jsp到servlet下载Excel。在本地生成的文件没有乱码 下载下来的就都是乱码 请教高手! 有什么解决方案 !

首先保证页面和后台之前都只同样的格式,别一个是UTF-8,一个GBK,然后你POJO的get属性里面设置str = new String(str.getBytes("ISO-8859-1"), "utf-8"); 试试看,因为没看源代码,所以不知道对不对

D. Servlet 中文字符串乱码问题!

1.POST方式提交,在获得提交表单信息之前调用request.setCharactersEncoding("UTF-8");2.在通过response获得输出流之前调用response.setCharacterEncoding("UTF-8");3.提交前采用encodeURI两次编码,记住一定是两次 data:{encodeURI(encodeURI(param))}方法二:ajax配置contentType属性,加上charset=UTF-8 在ajax方法中加入以下参数 contentType: “application/x-www-form-urlencoded; charset=UTF-8″

E. Servlet文件里面的乱码可以恢复正常吗

用Eclipse打开,项目文件上右击选择最后一项

F. java servlet出现中文乱码怎么办

response.setContentType("text/html;charset=UTF-8;pageEncoding=UTF-8");这个要在servlet的方法中的第一行,你先进行response的转换就可以了,改成response.setContentType("text/html;charset=UTF-8;pageEncoding=UTF-8");//放到这PrintWriter out=response.getWriter();//从这里response.setCharacterEncoding("UTF-8");out.println("<HTML>");out.println("<BODY>");out.println("Simple servlet");out.println("中国");out.println("</body> </html>");

G. servlet向mysql存入中文乱码怎么解决

今天在测试从web端存入数据到数据库,结果存入数据库的中文数据出现乱码。当然读取出来的时候也是乱码乱码的原因是tomcat的内部编码格式iso8859-1导致。 而在每个jsp页面设置的utf-8仅仅是该页面显示是用utf-8,而你用form表单提交的数据仍然是iso8859-1.所以要在接受form表单数据的servlet页面加上一行代码request.setCharacterEncoding("utf-8").为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。下面是我找的一些资料和一些总结:http://www.blogjava.net/yaya/archive/2008/10/05/232513.html2 表单使用Post方式提交后接收到的乱码问题这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。A 接受参数时进行编码转换String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。B 在请求页面上开始处,执行请求的编码代码,request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用Stringstr=request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。C 为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。3 表单get提交方式的乱码处理方式。如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码/、。解决办法:A 使用上例中的第一种方式,对接受到的字符进行解码,再转码。B Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true"属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"disableUploadTimeout="true" URIEncoding=”UTF-8”/>里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。4 上传文件时的乱码解决上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传组件,会发现有很多乱码想象。这是因为apach的先期commons-fileupload.jar有bug,取出汉字后进行解码,因为这种方式提交,编码又自动使用的是tomcat缺省编码格式iso-8859-1。但出现的乱码问题是:句号,逗号,等特殊符号变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。解决方式:下载commons-fileupload-1.1.1.jar这个版本的jar已经解决了这些bug。但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以及字符。5 Java代码关于url请求,接受参数的乱码url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。 如果设定了这个编码格式,则意味着所有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱码,例如一个链接 Response.sendDerect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用String name");得到的就是乱码。因为规定了必须是utf-8才可以,所以,这个转向应该这样写:Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);才可以。如果不设置这个参数URIEncoding=”UTF-8”, 会怎么样呢? 不设置则就使用了缺省的编码格式iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正常解析,如果使偶数个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就能正常解析,但中文的标点符号仍出现乱码。权宜之计,如果您的参数中没有中文标点符号,则可以在参数值最后加一个英文符号来解决乱码问题,得到参数后再去掉这个最后面的符号。也可以凑或使用。

H. 如何处理servlet中的乱码问题

格式统一:(可不用gb2312,但要统一)JSP:<%@page pageEncoding="gb2312"%>//页面的编码方式。<%@page contentType="text/html;charsetType=gb2312"%>//响应客户请求时,传输到客户端的传输方式。<%request.setCharacterEncoding("gb2312");%>//将客户端传输过来的参数作为gb2312编码。Servlet:request.setCharacterEncoding("gb2312");//设置输入编码格式。response.setContentType("text/html;charsetType=gb2312");//设置输出编码格式。

I. 客户电脑的ie6调用servlet下载附件,文件名总是一串乱码类似于“%E5%A5%A5%E8%BF%90%E4%BC%”

对于中文的乱码问题 终极办法 一般用unicode 服务端读取到中文后 变成unicode 客户端接收到后再转成中文 万无一失

J. jsp网页下载文件出现中文乱码,我的下载超链接指向文件,如果文件名是英文,就下载正常,如果文件名是

超链接的地址使用js自带的解码函数解码

若1还不行就在tomcat的server.xml文件里加上这个