社区
Web 开发
帖子详情
一个关于乱码的奇怪问题
AngelInDark
2006-06-29 11:55:41
在JSP页面里面有时候会出现乱码,但是重新刷新一下就可以正常显示,请教各位高手一般是什么原因造成这种现象,应该如何解决?
...全文
254
8
打赏
收藏
一个关于乱码的奇怪问题
在JSP页面里面有时候会出现乱码,但是重新刷新一下就可以正常显示,请教各位高手一般是什么原因造成这种现象,应该如何解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huxinsheng168
2006-06-30
打赏
举报
回复
应该不会这样的,在html的<head></head>之间也加上charset
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
再设置一下这个
eqxu
2006-06-30
打赏
举报
回复
楼上说的很详细,楼主的问题可能是错误的网页驻留,楼主删除cokiess
再补充一点,就是容器里的class文件也需要flash
yigeng29
2006-06-30
打赏
举报
回复
楼上说的很详细,楼主的问题可能是错误的网页驻留,楼主删除cokiess
coolcola21
2006-06-30
打赏
举报
回复
关于项目中大部分的中文问题,解决方法如下:
一、Java中文问题的由来
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:
从页面form提交数据到java程序 byte->char
从java程序到页面显示 char—>byte
从数据库到java程序 byte—>char
从java程序到数据库 char—>byte
从文件到java程序 byte->char
从java程序到文件 char->byte
从流到java程序 byte->char
从java程序到流 char->byte
如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。
二、解决方法
前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(Java或JSP自身产生的乱码请参看第一部分)。
1、JSP与页面参数之间的乱码
JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决。
如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CharacterEncodingFilter.java:
public class CharacterEncodingFilter implements Filter
{
protected String encoding = null;
public void init(FilterConfig filterConfig) throws ServletException
{
this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}
}
2、Java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
3、Java与文件/流之间的乱码
Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
4、其他
上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用Resin服务器,使用smartUpload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartUpload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartUpload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartUpload将字节流转换成字符串时采用了系统默认的编码,而将Resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartUpload的源文件,增加了一个属性charset和setCharset(String)方法,将upload()方法中提取参数语句:
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );
改成了
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );
终于解决了这个乱码问题。
kevinliuu
2006-06-29
打赏
举报
回复
在html的<head></head>之间也加上charset
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
AngelInDark
2006-06-29
打赏
举报
回复
页面上我已经设置了,现在是有时候打开是乱码,但是刷新一下页面就好了
huxinsheng168
2006-06-29
打赏
举报
回复
<%@ page language="java" pageEncoding="GB2312"%>
在你的jsp页面上加上这个
xyk0830
2006-06-29
打赏
举报
回复
把你的运行环境报下撒
奇怪
的struts2的中文
乱码
问题
及解决.docx
奇怪
的struts2的中文
乱码
问题
及解决.docx
RestSharp 组件 修改接口返回中文
乱码
、指定属性的参数别名
问题
这是github上下载下来,然后修改的,没提交到github上,大家下载后解压出来的那个dll是编译后,的,源码自己编译也可以,编译的时候选择编译那个 40 版本的,不要编译整个解决方案。 主要是修改两个
问题
:
一个
问题
是请求接口中文
乱码
的
问题
第二个
问题
是,有时候,对方接口参数比较
奇怪
,而我们的request类的属性又不能用那种名字,就需要指定别名。比如当当的开放平台 出版物类 的添加,某个参数的名字是 item_descs.editor_recomm ,显然,我们在写类的时候,无法把
一个
类的名字写成 item_descs.editor_recomm 这个,所以,需要为这个属性指定别名 使用方法: [RestRequestObjectAttribute("item_descs.media_comment")] public string item_descs__media_comment { get; set; } 这样,restsharp 就会按你上面指定的那个参数来发包了。 之前发了
一个
,那个是没只改了
乱码
问题
,没有修改指定参数别名的,以后大家下载这个新的
解
乱码
的方法
本文描述如何解
乱码
,并告知方法。此类
问题
虽小,但,往往难住不少人。
乱码
解读 帮助您解读
乱码
有时遇到
乱码
,确实很困惑。 懂的人一改就好 不懂得人来说就蛋疼的多了。 此软件可以帮助您解读各种
乱码
GNOME
乱码
.rar
GNOME图像界面
乱码
的主要原因 下载教程全都有。
Web 开发
81,115
社区成员
341,731
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章