刚才那个页面的乱码是这样的,?ì???¤±¨??×ò?ì?????????ì??·????ó?ì±?·????????÷?ì?????????????????????¤?????°???????ú???????¤??????°ì??2007?ê?????????????á?????????¤???????????????°???ú×????????????±??????????????????2006?ê?????????????????ó??????????????????另一个页面也是基本上相同的代码,但<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>乱码是这样的¹¤ÐÐÍøÕ¾ä¯ÀÀÁ¿Ê×´ÎÔ¾¾ÓÈ«ÇòÒøÐÐÀàÍøÕ¾µÚÒ»¡£ÇëÄú¹Ø×¢ÎÒÐиöÈËÍøÉÏÒøÐн»Ò×½
解决方案 »
- Struts框架中,跳转页面问题
- 这个不知道是什么问题引起的,可能是Hirbernate配置问题: === Cannot open connection ===分不够再加~
- webservice中能封装dll吗
- 如何配置Hibernate与SQL Server 2000
- 大家说 这是静态页吗,如果是动态的,他是怎么生成的
- responseXML 问题,100分相送,跪求跪求,快崩溃了!!
- 求教!TOMCAT配置问题
- 怎么用POP3命令标识一封新邮件??
- 关于在MasteringEJB运行实例代码遇到的问题!
- java读取xml后然后显示在IE上,保证所见即所得
- hibernate的一个错误,谢谢
- 程序部署问题
<%@ page import="java.util.*"%>页面前1行改成这个
Java Web应用中的乱码主要产生在以下几个方面和基本的解决方法: 1,页面乱码
默认为ISO8859-1,通过@page指令解决。
2,请求响应乱码
请求/响应的编码默认为ISO8859-1,通过过滤器设置request和response的
setCharacterEncoding方法来解决。
3,数据库乱码(以数据库的客户端默认编码)
对于Oracle和SQL Server没有什么问题,对于MySQL可以在连接字符串后面加上
?useUnicode=true&characterEncoding=gb2312来解决,或者修改my.ini的
MySQL参数文件。
4,URL参数乱码
默认为ISO8859-1,这个最为麻烦,如果使用Tomcat,需要修改server.xml,把
其中的两个Connector元素加上URIEncoding="gb2312"属性,对于Firefox这就
可以了,但是对于IE这还不够,需要手工将中文字符使用URLEncoder.encode方法
转为URL编码,就是采用%XX%XX%XX这样的格式。 总之Java Web开发的过程就是与乱码不断进行斗争的过程。也是这里的一个贴子,我copy你看看吧怎么解决吧...
总能受困于 这样或那样的编码问题这里讨论下 新手学习,高手指教 一起研究下
(以 tomcat mysql 做例子 我推荐所有的编码采用utf-8)1 工程
工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码
我们中文系统通常是GBK 推荐都采用utf-8
utf-8 的时候 你编译 生成doc 可能会遇到乱码(特别是采用ant 的时候,生成doc你几乎100%会遇到)解决方法 以ant 为例子
编译 注意 encoding 参数
<target name="build" >
<mkdir dir="${build.dir}" />
<javac encoding="utf-8" destdir="${build.dir}" target="1.3" debug="true" deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}" />
<classpath refid="master-classpath" />
</javac>
</target>生成doc 注意 encoding 和 charset
<target name="doc">
<mkdir dir="doc" />
<javadoc charset="utf-8" encoding="utf-8" packagenames="${packages}" sourcepath="src" destdir="doc" author="true" version="true" use="true" splitindex="true" >
<classpath refid="master-classpath" />
</javadoc>
</target>这里 的encoding 就是指的你 java 文件的编码格式 javac 和javadoc 都有这个参数
charset 指的是 生成 doc 后的编码方式 javadoc 的参数2 数据库
mysql 的编码最复杂 从4以后 mysql 号称支持多编码 它更灵活了 我们也更麻烦了
mysql 有4个级别的编码
系统级
库级
表级
sql语句级
请保持采用统一的编码 推荐utf-8
其它数据库要简单的多 一般都是一种编码3 web server
tomcat 为例
tomcat server.xml 中一个参数
<Connectorport="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIncoding="utf-8"/>
经测试 这个URIncoding 参数主要是 get 方法中采用编码4 jsp 显示层
第1条中说明了 jsp 文件本身的格式
很多朋友采用eclipse +myeclipse 生成jsp
它自动生成一个头<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
不要误解 这句话不能保证你在ie里看到的不是乱码
pageEncoding它的意思是 这个页面本身采用的是 utf-8 (似乎只在eclipse 里有效果 ,我不确定)
为了在ie 里不乱码 你还得加一句 <%@ page contentType="text/html; charset=UTF-8"%>
它不能在(myeclispe)自动生成 推荐修改 myeclipse的模板 在下边的目录里
MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates
里边的jsp模版 你加上<%@ page contentType="text/html; charset=${encoding}"%>5 filter
自从tomcat 4 以后 网上就流传了一个SetCharacterEncodingFilter 过滤器 搜一下有很多
很好用 web.xml 中加入
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>6 资源文件
首先保证 文件本身是utf-8
然后部署的时候用 native2ascii 转换
这里给出 ant 里的例子
<native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes" src="${src.dir}" includes="**/*.properties" />
而且sqlserver好像不能设置编码,mysql可以。
http://blog.csdn.net/joyous/archive/2007/02/07/1504274.aspx
我以前出现过类似情况,然后换了jdk并将数据库与编译环境的编码设置一致就ok了,希望对你有帮助!
jdbc:mysql://localhost:3306/test?Unicode=true&characterEncoding=GBK
package com.shop.filter;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true; public void destroy() { this.encoding = null;
this.filterConfig = null; }
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException { // Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
} // Pass control on to the next filter
chain.doFilter(request, response); }
public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false; }
protected String selectEncoding(ServletRequest request) { return (this.encoding); }
}
还要在web.xml配置,在web.xml加入一下代码
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class><!--类的路径-->
com.shop.filter.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<!--编码格式-->
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
只要加上这个characterEncoding=什么编码,连接时加上,
试试看吧
但对于大部分情况来说,够了。
每次项目前,
1 将tomcat设置为UTF-8
2 将数据库编码设为UTF-8
3 将所有页面编码,包括js文件的编码,都设为UFT-8
4 所有表单提交,request等,都设为UTF-8
虽然有不少朋友认为用GBK也可以显示中文,但用GBK遇到乱码的机会要比用UTF-8要大得多。
后来我们做项目,再不提GBK,倒省了不少事,以后项目全部UTF-8,不然每次都讨论用什么
编码
// 将 s 进行 BASE64 编码
public static String getBASE64(String s) {
if (s == null) return null;
return (new sun.misc.BASE64Encoder()).encode( s.getBytes() );
} // 将 BASE64 编码的字符串 s 进行解码
public static String getFromBASE64(String s) {
if (s == null) return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
}
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
%>且确认一下保存jsp文件时是否保存成gbk的编码类型
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
%> jdbc:mysql://localhost:3306/test?Unicode=true&characterEncoding=GBK这两项很重要!!
楼上说的也可以试下,这是我一项目的配制文件,可以参考下
##please check your server parameter##
#dbDriver of mysql#
dbDriver=com.mysql.jdbc.Driver
#dbUrl of mysql #
dbUrl=jdbc:mysql://localhost/crm?useUnicode=true&characterEncoding=GBK
#your mysql connection user#
dbUsername=root
#the user password#
dbPassword=123456
response.setCharacterEncoding("GBK")
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
conn = db.conn();
ps = conn.prepareStatement("SELECT * FROM news");
rs = ps.executeQuery();
while(rs.next()){ String info = rs.getString("newscontent");
String info_t = new String (info.getBytes("ISO8859-1"),"GBK");
%>
<P><font size="2"><%=info_t %></P>
<%// 这里的info就乱了
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
try {
if(null==originString&&originString.equals("")) {
return null;
}else {
return new String(originString.getBytes("ISO8859_1"), "GB2312");
}
}catch(Exception e) {
e.printStackTrace();
return null;
}
}去转换就不乱吗了,然后后来我这样转了的话变乱吗,不转的话就不乱吗,后来仔细分析发现我这两次之间重装过1次数据库,注意一点就可以了,将数据库,程序,页面,服务器是GBK就都是GBK,是UTF-8就全部都用UTF-8,如果不一致就可能乱吗。。MYSQL的字符级就比较麻烦,数据库,表,字段的COLLTION和CHARSET都要改成一致的,建表的时候字段也最好加上CHARSET,这样才能保证不出现乱码,不知道自己说的对不对不,希望可以给你带来点帮助