java写中文到access数据库乱码,java项目的属性为UTF-8
发布网友
发布时间:2022-04-11 21:33
我来回答
共4个回答
懂视网
时间:2022-04-12 01:55
由于Java的String类型用的是unicode编码,微软的Access 数据库 使用的是gbk编码。 所以使用String类型的变量存储Access中的文本字段 中文 会发生乱码的现象。 使用byte[]类型可以 解决 这一 问题 。 从Access 数据库 中读取 中文 byte[] bts=null; String ot
由于Java的String类型用的是unicode编码,微软的Access数据库使用的是gbk编码。
所以使用String类型的变量存储Access中的文本字段中文会发生乱码的现象。
使用byte[]类型可以解决这一问题。
从Access数据库中读取中文
byte[] bts=null;
String other = null;
bts = rs.getBytes("ziduanming"); //读取ziduanming字段
if(bts != null) other = new String(bts,"gbk");//如果不为空,则进行转换
热心网友
时间:2022-04-11 23:03
这里要注意3个方面的设置
第一步: 在你自己的servlet里设置
//第一步设置好字体
//设置必须与网页头文件保持一直utf-8 不然依然不管用
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
第二步: 在你的接收页面的设置
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
第三步:在你的过滤器里加上相关配置文件
EncodingFilter.java
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 EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
try
{
// System.out.println("过滤开始");
// request.setCharacterEncoding("utf-8");
// chain.doFilter(request, response);
// System.out.println("过滤结束");
} catch (Exception e)
{
e.printStackTrace();
//throw new IOException(e.getMessage());
}
// Select and set (if needed) the character encoding to be used
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");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
最后要在web.xml里做相关的配置
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>util.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
恩 这些都做完的话 就应该没问题了
我的环境是JDK1.5~1.6 MyEclipse6.0
这些只是适用于J2EE工程
热心网友
时间:2022-04-12 00:21
这其中存在一个转换问题:
如System.out.println(new String("中国".getBytes("gbk"), "utf-8"));
System.out.println(new String("中国".getBytes("utf-8"), "gbk"));
//将“中国“的gbk编码格式按着utf-8解析,或者反过来都会出现乱码。
如浏览器当前为gbk编码,就以gbk编码格式来提交。 这本身是不会出现乱码的,问题就出在Web服务器接收数据的时候,HttpServletRequest在将客户端传来的数据转成ucs2码上出了问题。在默认情况下,是按着iso-8859-1编码格式来转的,而这种编码格式并不支持中文,所以也就无法正常显示中文了,解决这个
问题的方法是用和客户端浏览器当前编码格式一致的编码来转换,如果是utf-8,则在doPost方法中应该用以下的语句来处理:
request.setCharacterEncoding("utf-8");
热心网友
时间:2022-04-12 01:55
通过在项目中增加过滤器(filter)进行适当的转码就可以了,具体的方式可以参照J2EE项目中,使用filter对字符集进行统一转换的方式,当然不仅限于J2EE项目。