我用的jdk1.5+tomcat5.5+mysql5.0,数据库的字符集是utf8,jsp页面字符集也是utf8,现在我遇到这样的问题:数据库中只要是中文的,就全部都是乱码,但从页面读出来是正常的;从页面中写中文,数据库中是乱码,但从页面读出来是正常的;直接在MYSQL Command Client中写insert语句,插入的中文显示正常,但读到页面是乱码。我有两个问题需要请教。1、如何把数据库中的乱码转换成正常的,因为数据库中现有的数据不能丢失。2、如何解决从页面写数据库乱码问题?
请各位大侠帮忙解决,谢谢!谢谢!
请各位大侠帮忙解决,谢谢!谢谢!
* 转换数据库读出的字符显示为中文
* @param str 要转换的字符 String
* @return String
*/
public String getStr_gb(String str){
String temp = null;
try {
String temp_p = str;
if (temp_p == null) {
return temp;
}
temp_p = temp_p.trim();
temp = new String(temp_p.getBytes("ISO8859_1"), "GBK");
}
catch (Exception e) {
e.printStackTrace();
}
return temp;
}
<data-sources>
<data-source type="org.apache.commons.dbcp.BasicDataSource" key="org.apache.struts.action.DATA_SOURCE">
<set-property value="com.mysql.jdbc.Driver" property="driverClassName" />
<set-property value="jdbc:mysql://127.0.0.1:3306/test" property="url" useUnicode="true" characterEncoding="gbk" />
</data-source>
</data-sources>
to hyperading() :我刚刚也试了一下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;/**
* Example filter that sets the character encoding to be used in parsing the
* incoming request
*/
public class SetCharacterEncodingFilter implements Filter { /**
* Take this filter out of service.
*/
public void destroy() {
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException { request.setCharacterEncoding("GBK"); // 传递控制到下一个过滤器
chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws ServletException {
}
}
然后在tomcat中的web.xml中加入这样的一段:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
结果系统只能进第一个登录页面,再就进不去了,提示出错:
type Status reportmessage /test/userLogin.dodescription The requested resource (/test/userLogin.do) is not available.请问过滤器是怎么用的,是不是我把SetCharacterEncodingFilter.class放错地方了,应该放在哪里?谢谢!
LANG=en_US.ISO-8859-1;export LANG
把系统编码换成ISO-8859-1