读书人

为什么通过JSP页面写入数据是?问号,该

发布时间: 2012-03-02 14:40:29 作者: rapoo

为什么通过JSP页面写入数据是??????问号
request.setCharacterEncoding( "GB2312 ");

大家好,小弟有个问题请教大家。
一个页面向数据库提交写入中文数据,添加一行数据,在数据库显示的是“???????”问号。因为我已经处理过中文转换,所以JSP向数据库中提交的数据不是乱码而是问号。奇怪的事情就这个问号,因为我在数据库中用SQL语句INSERT INTO test VALUES ( '中文 ') "插入的就没有问题,而通过JSP就不可以,就显示是问号。

告急,求大家帮忙啊!谢谢!!

我用的是MySql数据库,PhpMyAdmin显示数据库,Tomcat5,JDK1.6,Eclipse !!

其中用到了Struts框架!

我在连接数据库class中处理过
驱动org.gjt.mm.mysql.Driver 和 com.mysql.jdbc.Driver 全使用过。
这早也处理过了jdbc:mysql://localhost:3306/test?=useUnicode=true&characterEncoding=UTF-8 ";

页面中处理
request.setCharacterEncoding( "UTF-8 ");

XML中也配置处理了
SetCharacterEncodingFilter.java

Tomcat中的server.xml中的
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port= "8080 "
maxThreads= "150 " minSpareThreads= "25 " maxSpareThreads= "75 "
enableLookups= "false " redirectPort= "8443 " acceptCount= "100 "
debug= "0 " connectionTimeout= "20000 "
disableUploadTimeout= "true " URIEncoding = "UTF-8 " />
<!-- Note : To disable connection timeouts, set connectionTimeout value
to 0 -->
也修改了一下,添加了一个URIEncoding = "UTF-8 "


总之所有在网上能找到的方法都用过了,项目所有用到的工具字符都是 "UTF-8 "。
请有经验的朋友告诉指导我下好么?我都被这个问题困扰好几天了。
跪求,谢谢!


[解决办法]
你的数据库不是utf-8的,把jdbc:mysql://localhost:3306/test?=useUnicode=true&characterEncoding=UTF-8 "换成
jdbc:mysql://localhost:3306/test?=useUnicode=true&characterEncoding=gb2312 "

或者更改数据库的编码
[解决办法]
还要加response.setCharacterEncoding( "UTF-8 ");
[解决办法]
那你用的mysql数据库里用的是什么编码?数据库里能显示中文吗?如果数据库里能显示,就是读取时转换的编码不统一了。再找找吧
[解决办法]
在提交的页面加入下面一段代码.然后将提交的内容用getStr方法转换一下.

<%!
public String getStr(String s)
{
String str=s;
try
{
byte b[]=str.getBytes( "ISO-8859-1 ");
str=new String(b);
return str;
}
catch(Exception e)
{return null;}
}
%>

[解决办法]
利用过滤器(Filter)试试

//这个是过滤器类,其中的GB2312可以替换成UTF-8
public class CharEncodingFilter implements Filter {
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response,


FilterChain filterChain) throws IOException,ServletException {
System.out.println( "in filter ");
request.setCharacterEncoding( "gb2312 ");
response.setCharacterEncoding( "gb2312 ");
response.setLocale(Locale.SIMPLIFIED_CHINESE);
filterChain.doFilter(request, response);
System.out.println( "in filter ");
}
public void destroy() {
this.filterConfig = null;
}
}

----------------------
在web.xml里配置加入如下代码
<filter>
<filter-name> charencode </filter-name>
<filter-class> servlet.CharEncodingFilter </filter-class>
</filter>
<filter-mapping>
<filter-name> charencode </filter-name>
<url-pattern> /* </url-pattern>
</filter-mapping>

[解决办法]
页面中处理
request.setCharacterEncoding( "gb2312 ");试试
[解决办法]
你看看你表的编码,肯定不是utf8的
[解决办法]
我在数据库中用SQL语句INSERT INTO test VALUES ( '中文 ') "插入的就没有问题,而通过JSP就不可以,就显示是问号。
_______________________________________________________---
我觉得是因为你从表彰中读的中文没有经过转换,把他转换一下试试
[解决办法]
向控制台输出语句,查一下问题出在哪里了~试试
[解决办法]
To gyblin ():
你需要解决三点
1 jsp页面还要加上 <%@ page contentType= "text/html; charset=UTF-8 " %>
2 request.setCharacterEncoding( "utf8 ");
3 数据库安装时候选择 "utf8 "
4jdbc:mysql://localhost:3306/vote?useUnicode=true&characterEncoding=utf8
记住这四步,你可以采取不同的方法实现他们!
[解决办法]
应该不是中文转码问题,估计是识别不出导致的,可能和数据库有关系
[解决办法]
我以前也遇到过这样的问题
后来我实在解决不了
就装了一个最新的mysql
然后将它的默认字符选为中文
不过我丢失了很多数据
巨惨
set names ' '
[解决办法]
这个问题很好解决,你一定没用参数就insert 数据了....

[解决办法]
你数据库的问题,编码不正确.你在页面用UTF-8是中文说明在UTF-8编码下中文显示没有问题,存数据库之前也是正常的,但存入数据库之后就是???了.存的是???当然读取也是???,所以就说明你的数据库编码不是UTF-8,你在存数据的时候有没有进行编码转换的问题.你可以测试在数据库用SQL命令执行一下插入,然后读取查看是否显示正常.
[解决办法]
从新创建下库或者表实验下
CREATE DATABASE U_R_database_name DEFAULT CHARACTER SET utf8;

CREATE TABLE U_R_table_name(
...
)
DEFAULT CHARACTER SET utf8;
[解决办法]
把tomcat的下列配置项改为URIEncoding = "gbk "应该没有问题
[解决办法]
转码函数~
[解决办法]
form 表但 的 mothed 方法改成 post ,get的话加转换也没用
[解决办法]
编码问题
建议页面的编码形式与数据库的编码形式一致
[解决办法]
编码 要求有保障那要有很多方面,你的问题可能出在 eclipse编码字符集为gbk
写出的自然就是gbk的页面编码,要不按照这样的方法,你首先用记事本看看页面的编码



[解决办法]
form 表但 的 mothed 方法改成 post ,get的话加转换也没用

貌似以前有人提出过类似问题,但可以用String.getBytes( "ISO-8859-1 ")来解决的

===========================================
楼主,你显示出来的究竟是乱码还是只有问号,如果问号的话可能是数据库的关系,乱码的话应该就是中文转码的问题了
[解决办法]
mysql配置时候选择 "utf8 "或 "gbk "
[解决办法]
这段时间经常看到有人问到web开发中怎么中文总是?号。原因其实很简单,因为大家大多用的是tomcat服务器,而tomcat服务器的默认编码为 iso-8859-1(西欧字符)。就是因为iso-8859-1(西欧字符)编码造成了我们经常看到?号。关于iso-8859-1(西欧字符)更多知识请看《字节,字符和编码》这篇文章。

方法一:最简单也是用的最多的方法。
<%@ page language= "java " pageEncoding= "GBK " %>
或者 <%@ page contenttype= "text/html;charset=gbk ";> 这里可以用gb2312或者gbk,只是gbk比gb2312支持跟多的字符。

这个方法用于jsp页面中的中文显示。

方法二:使用过滤器。
过滤器使用主要针对表单提交,插入数据库的数据都是?号。这也是应为tomcat不按request所指定的编码进行编码,还是自作主张的采用默认编码方式iso-8859-1编码。
编写一个SetCharacterEncodingFilter类。
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;

public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;

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
this.ignore=false;
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO 自动生成方法存根
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}

public void destroy() {
// TODO 自动生成方法存根
this.encoding = null;
this.filterConfig = null;
}

protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}

然后再web.xml加上
<!-- Set Character Encoding-->
<filter>
<filter-name> Set Character Encoding </filter-name>
<filter-class> com.struts.common.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>
<!-- Set Character Encoding-->

使用过滤器的好处很多,特别是项目之中。
而且在使用国际化时就更有用了,只要在页面指定 <%@ page language= "java " pageEncoding= "UTF-8 " %> ,服务器就会根据本地Locale来显示正确的字符集。

所以我特别推荐使用过滤器。

方法三:修改tomcat的server.xml文件中URIEncoding。
<Connector
debug= "0 "
acceptCount= "100 "
connectionTimeout= "20000 "
disableUploadTimeout= "true "
port= "80 "
redirectPort= "8443 "
enableLookups= "false "
minSpareThreads= "25 "


maxSpareThreads= "75 "
maxThreads= "150 "
maxPostSize= "0 "
URIEncoding= "GBK "
>
</Connector>
这个方法主要针对从url中获取字符串的问题。
在tomcat5.0及以上版本,post和get方法在处理编码时有所不同。如果你在url中获取中文就会出现?号。但在tomcat4.1版本没有问题,因为tomcat4.1的post和get方法在处理编码时是一样的。
[解决办法]
你在dos下select一下看看
[解决办法]
在你的servlet类的doget方法中加上下面这句试一试
response.setContentType( "text/html; charset=GBK ");
[解决办法]
你把server.xml的utf-8修改为GBK

读书人网 >Java Web开发

热点推荐