servlet,mysql汉字编码问题

CaptainGan 2009-12-31 10:15:19
在向mysql数据库中插入汉字时候,不能像mysql插入汉字,出现错误。这个是servlet还是mysql的问题,在设置了filter还是出现错误。
这个是servlet的问题还是mysql的问题。
...全文
237 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wallier 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 islandrabbit 的回复:]
这个:
Java codepublicvoid init(FilterConfig arg0)throws ServletException
{this.filterConfig= filterConfig;this.encoding= filterConfig.getInitParameter("encoding");
}
要改成:
Java codepublicvoid init(FilterConfig filterConfig)throws ServletException
{this.filterConfig= filterConfig;this.encoding= filterConfig.getInitParameter("encoding");
}
[/Quote]

嘿嘿,M14再见吧,名探偵...
islandrabbit 2010-01-03
  • 打赏
  • 举报
回复
这个:

public void init(FilterConfig arg0) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}


要改成:

public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}

LYH270121 2010-01-03
  • 打赏
  • 举报
回复
出现了同样的问题,有这个真是太及时了。
CaptainGan 2010-01-02
  • 打赏
  • 举报
回复
我试了下上面的方法,在tomcat启动加载的时候没有出现错。在servlet中还是添加汉字,还是打印出还是“???”,是不是在servlet中是不是要引用一下?希望大家帮助帮助一下。
张祥龙 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 captaingan 的回复:]
又有一个话题了,在改写了servlet的编码后,向mysql更新字段胡总有汉字好像不能识别,在表格中就出现式"????",语句是执行成功的了。
在mysql的命令行中更新数据中,有汉字的字段也不能直接更新,需要将编码改成 gb2312,要执行charset gb2312的命令后才可以。
那么在java代码中怎样向mysql中插入或者是更新含有汉字的字段。请解答
[/Quote]
数据库的编码也改成gb2312
可靠点的方法:重新建表,url的值设置如些
jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=gb2312
CaptainGan 2010-01-02
  • 打赏
  • 举报
回复
又有一个话题了,在改写了servlet的编码后,向mysql更新字段胡总有汉字好像不能识别,在表格中就出现式"????",语句是执行成功的了。
在mysql的命令行中更新数据中,有汉字的字段也不能直接更新,需要将编码改成 gb2312,要执行charset gb2312的命令后才可以。
那么在java代码中怎样向mysql中插入或者是更新含有汉字的字段。请解答
张祥龙 2010-01-02
  • 打赏
  • 举报
回复
上边写的不是很健壮
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
String encoding = selectEncoding(request);
if (encoding != null)
{
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
filterChain.doFilter(request, response);
}else{
throw new RuntimeException("encoding为空");
}
}
张祥龙 2010-01-02
  • 打赏
  • 举报
回复
dofilter方法中的判断有问题。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
String encoding = selectEncoding(request);
if (encoding != null)
{
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
filterChain.doFilter(request, response);
}
}
TzSword 2010-01-02
  • 打赏
  • 举报
回复
以前写的编码转换类,供参考

package con.ok;

import java.io.UnsupportedEncodingException;
public class 网络蜗牛{

// "gb2312"到"Unicode"的转码
public String toUnicode(String str){
char[]arChar=str.toCharArray();
int iValue=0;
String uStr="";
for(int i=0;i<arChar.length;i++){
iValue=(int)str.charAt(i);
if(iValue<=256){
// uStr+=""+Integer.toHexString(iValue)+";";
uStr+="\\u00"+Integer.toHexString(iValue);
}else{
// uStr+="&#x"+Integer.toHexString(iValue)+";";
uStr+="\\u"+Integer.toHexString(iValue);
}
}
return uStr;
}

// "gb2312"到"ISO-8859-1"的转码
public String iso2gb(String str) {
try {
str = new String(str.getBytes("ISO-8859-1"), "gb2312");
} catch (Exception e) {
System.out.println("Encoding Error!");
}
return str;
}

//"ISO-8859-1"到"gb2312"的转码
public String gb2iso(String str) {
try {
str = new String(str.getBytes("gb2312"), "ISO-8859-1");
} catch (Exception e) {
System.out.println("Encoding Error!");
}
return str;
}



public String getChinese(String InputString) throws Exception
{
byte b[]=InputString.getBytes("ISO-8859-1");
String OutputString=new String(b);
return OutputString;
}




public static void main(String args[]){
System.out.println(new Native().toUnicode("人"));
}

}

TzSword 2010-01-02
  • 打赏
  • 举报
回复
CaptainGan 2010-01-02
  • 打赏
  • 举报
回复
而且向数据库中插入的还是"????".
CaptainGan 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tzsword 的回复:]
引用 14 楼 captaingan 的回复:
那个打印在MyEclipse控制台上,在向数据库插入以前,在servlet中打印的,从数据库读出来是可以在jsp页面显示汉字。

  既然在Servlet中数据都正常的话。。。。那直接可以把过滤器删了。。。
  显然是受网上影响咯。。。。
    虽然说过滤器是王道。。。但你的数据没问题的话,就不要过滤器了。。
      过滤器是最后一招。。。嘿嘿
[/Quote]
我的意思是说在向数据库更新或者插入之前,在servlet中将sql语句打印出来有汉字的地方都是出现"????"的。
TzSword 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 captaingan 的回复:]
那个打印在MyEclipse控制台上,在向数据库插入以前,在servlet中打印的,从数据库读出来是可以在jsp页面显示汉字。
[/Quote]
既然在Servlet中数据都正常的话。。。。那直接可以把过滤器删了。。。
显然是受网上影响咯。。。。
虽然说过滤器是王道。。。但你的数据没问题的话,就不要过滤器了。。
过滤器是最后一招。。。嘿嘿
CaptainGan 2010-01-02
  • 打赏
  • 举报
回复
对了,我在数据库表格中所有要用到汉字的字段都是设置成为gb2312的编码格式的。那么就有可能是servlet中的编码转换有问题了。那个过滤器好像没有起作用。
CaptainGan 2010-01-02
  • 打赏
  • 举报
回复
那个打印在MyEclipse控制台上,在向数据库插入以前,在servlet中打印的,从数据库读出来是可以在jsp页面显示汉字。
「已注销」 2010-01-02
  • 打赏
  • 举报
回复
可能是數據庫里的字符集沒有設對吧
TzSword 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 captaingan 的回复:]
我试了下上面的方法,在tomcat启动加载的时候没有出现错。在servlet中还是添加汉字,还是打印出还是“???”,是不是在servlet中是不是要引用一下?希望大家帮助帮助一下。
[/Quote]
楼主。。你统一字符了么?
这个???是字符间强转在造成的。。。
dinghun8leech 2009-12-31
  • 打赏
  • 举报
回复
java.lang.NullPointerException
at com.researchDeclare.charsetfilter.CharSetClass.init(CharSetClass.java:54)

com.researchDeclare.charsetfilter.CharSetClass类的54行init方法报空指针异常。
CaptainGan 2009-12-31
  • 打赏
  • 举报
回复
我看看效果如何。
张祥龙 2009-12-31
  • 打赏
  • 举报
回复

 
private String selectEncoding(ServletRequest request)
{
// TODO Auto-generated method stub
return this.encoding;
}

这个方法太不科学吧
加载更多回复(7)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧