servlet,mysql汉字编码问题

CaptainGan 2009-12-31 10:15:19
在向mysql数据库中插入汉字时候,不能像mysql插入汉字,出现错误。这个是servlet还是mysql的问题,在设置了filter还是出现错误。
这个是servlet的问题还是mysql的问题。
...全文
232 27 打赏 收藏 转发到动态 举报
写回复
用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)
《JSP程序设计从入门到精通》电子书   第1篇 入门篇 7   第1章 Jsp概述 技术分析 7    1.1 Jsp简介与历史背景 7    1.1.1 日新月异的Web技术 7    1.1.2 什么是JSP 8    1.1.3 JSP技术有以下几个显著的优点 9    1.1.4 JSP和其他类似或相关技术的一个简单比较 10    1.2 JSP环境安装配置 12    1.2.1Tomcat下JSP环境的配置 12    1.2.1建立自己的Jsp工作目录 13    1.3 JSP语法介绍 14    1.3.1 JSP页面中的元素 14    1.3.2 JSP语法概要 15    1.3.3关于模板文本(静态HTML) 16    1.4 运行第一个Jsp程序 16    1. 5本章小结 20   第2章Jsp 基础学习 20    2.1 JSP基本语法 20    2.1.1 JSP 语法之声明 21    2.1.2 JSP 语法之表达式 21    2.1.3 JSP 语法之Scriptlet 21    2.2 JSP的指令 22    2.2.1 page指令(Directive) 22    2.2.2 include指令(Directive) 24    2.3 JSP的动作 25    2.3.1 jsp:include动作 25    2.3.2 jsp:useBean动作 27    2.3.3 jsp:setProperty动作 29    2.3.4 jsp:getProperty动作 30    2.3.5 jsp: forward动作 31    2.3.6 jsp: plugin动作 31    2.3.7注释 31    2.4 JSP 9种基本内置组件 31    2.5 JSP中Session的使用 34    2.6 JSP中forward的使用 36    2.7 JSP运行时错误处理与应该注意的六个常见问题 37    2.8 JSP小实例 38    2.8.1实例1(在JSP中定义函数) 38    2.8.2实例2(获取各种CGI环境变量) 39    2.8.3实例3(JSP里request变量列表) 42    2. 9本章小结 44   第3章JavaBean组件 44    3.1 什么是JavaBeans 45    3.1.1 JavaBeans 简介 45    3.1.2 JavaBeans 属性 45    3.1.3 JavaBeans 的事件 50    3.2 在Jsp中使用JavaBeans 55    3.3 JavaBeans的scope属性 57    3.4 JavaBeans应用实例 59    3.4.1 实例1(HelloWord.java) 59    3.4.2 实例2(People.java) 60    3.4.3实例子3数组应用 (Example2_3.java) 60    3.4.4实例子4运算符、表达式应用 (Example3_1.java) 61    3.5 本章小结 62   第4章Jsp与Servlet 62    4.1 什么是Servlets 63    4.1.1 JavaServlet的解释 63    4.1.2 什么是Jsp 65    4.1.3 得到一个Servlets和JSP的运行环境 66    4.1.4 实现第一个JSP和SERVELT 67    4.2 Servlet规范定义的Servlet 生命周期 70    4.3 JSP/Servlet的重定向技术综述 72    4.3.1 RequestDispatcher.forward() 72    4.3.2 response.sendRedirect() 73    4.4 理解会话 74    4.4.1 会话状态跟踪API 75    4.4.2 在会话对象中保存数据 76    4.4.3实例:显示会话信息 76    4.5 用Java Servlets代替CGI 78    4.6 JSP/Servlet 中的汉字编码问题 80    4.7 图解Eclipse+Tomcat集成开发Servlet 84    4.8 Servlets/JSP开发技术问答 93    4.9 Servlet小实例 97    4.5.1实例1(输出) 98    4.5.2实例2(获取表单参数) 99    4.5.3实例3(获取jsp各种参数) 101    4.1
JSP实践之旅 电子书版



序言--关于JSP实践之旅
简明介绍
JSP内幕
JSP官方白皮书
国内不谈java
基本语法介绍
2001年度Java最佳技术和产品
JSP入门介绍
三种Web开发主流技术的评价之PHP
三种Web开发主流技术的评价之ASP
三种Web开发主流技术的评价之JSP
使用JSP技术设计电子商务应用系统——从入门到精通
JSP手册
关于PHP的一种评论:
有感于《一个最近完成的JAVA项目的反思》
ASP/PHP/JSP大比拼
动态网页制作技术JSP与ASP的比较
ASP与JSP的比较
关于JSP开发/支撑平台
Jakarta-Tomcat 简明中文版用户指南第一部分
Apache Tomcat 4.0的新特性
Tomcat3.1新特性
如何在Windows 9x环境中配置Apache + Tomcat.JSP
JSWDK环境安装与配置
Resin服务器平台介绍
Resin在IIS中的安装配置
JRun2.3平台介绍
Unify eWave ServletExec
WebSphere应用服务器
在Windows2000上安装Apache+ApacheJserv+gnujsp之完全攻略
如何同时安装并支持PHP和JSP
redhat下tomcat的安装
在Windows NT 4.0下安装Apache+Servlet+JSP
Redhat+apache+jserv+jsdk
JSP语法介绍
SJP语法详解
JSP/Servlet 中的汉字编码问题
javamail在JSP中的应用
javamail何志强篇
JDBC精要
jsp在win2k/oracle上的应用
如何用UML为JSP建模
通用信息发布程序
JSP概述及音乐店设计
不用odbc直接连接SQL Server
jsp的出错处理
jsp的wap应用
jsp实现购物程序
用jspsmart Bean实现文件上载
用jsp连接mySQL数据库
基本内置组件
JDBC应用示例
一个用JSP做的日历
JSP技巧集锦(一)
关于JSP写文件的补充
JSP文件操作:读取,写入和追加
在jsp中实现分页

67,513

社区成员

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

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