有没有试过直接打印page.getAttributeValue("title")?
解决方案 »
- Java获取USB数字证书信息的问题
- XStream 解析XML 问题
- Action获取不到值的问题!
- xml+myeclipse乱码问题?
- struts2对action中的属性注入问题
- struts2+spring+hibernate整合错误
- struts中连接数据库
- EJB interfaces的Remote,local,remote/lacal 之间有什么区别.ejb 方法的interfaces 的remote,home 之间有什么区别?
- 高手帮忙啊!!关于struts的filter问题??
- 初学着求助!!求助!!!
- 请高手回答,如何将this指向一个对象?
- 用过JDBC2.0 JTA的朋友请进来,小妹有问题啦
ret.title = new String(page.getAttributeValue("title").getBytes("ISO8859-1"),"UTF-8");中将"UTF-8"改为"gb2312"。
页头加上<%@ page language="java" pageEncoding="gb2312"%>
所以,不能<%@ page language="java" pageEncoding="gb2312"%>这个方式
public static String parseChinese(String in) {
String s = null;
byte temp[]; if (in == null) {
System.out.println("Warn:Chinese null founded!");
return new String("");
} try {
temp = in.getBytes("iso-8859-1");
s = new String(temp);
} catch (Exception Ex) {
System.out.println(Ex.toString());
} return s; }
public class Coding {
public static String transtr(String str) throws Exception{
str = new String(str.trim().getBytes("ISO-8859-1"),"GB2312");
return str;
}
}
数据库表--page---里面有一个字段xml_config,其中有一条记录对应的这个字段的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
<page title="登陆" desc="美丽的地方" banner="/image/test.jpg" article="login" encode="UTF-8" align="0" showMode="0" maxListCount="12">
<ico url="/image/ico/1.png"></ico>
</page>
</xml-body>
然后,现在我有个类Pageconfig,作用就是专门去取这个里边的内容,具体过程还有其他的类的作用,取这个里面的比如title,desc,banner这些xml属性的内容是用这个方法。代码片断如下:
static PageConfig newPageConfig(String xml)
{
SAXBuilder builder = new SAXBuilder();
PageConfig ret = new PageConfig();
try
{
InputStream st = new ByteArrayInputStream(xml.getBytes());
Document doc = builder.build(st);
Element root = doc.getRootElement();Element page = root.getChild("page");ret.title = new String(page.getAttributeValue("title").getBytes("ISO8859-1"),"UTF-8");
现在是我取到这些属性后,我将通过我的另一个类fiter把这些内容生成wml页面显示给用户,目前是显示在wml页面的比如title为“????”,fiter的函数output首先转化这个title的内容为ISO8859-1,然后转化为UTF-8 public void outPut(String str)
{
try
{
str = new String(str.getBytes("UTF-8"), "iso-8859-1");
}
catch (UnsupportedEncodingException e)
{
System.out.println(e.getMessage());
e.printStackTrace();
} ServletOutputStream out = null;
try
{
out = response.getOutputStream();
out.println(str);
}
catch (IOException ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
所以我现在需要在pageConfig类中首先转化title为UTF-8格式
虽然下面的是针对web应用的,不过应该能给楼主一些提示:中文乱码问题的根本解决办法是明确地指定整个应用系统统一的字符集。
要做到以下几点:
一、开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。
二、使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
request.setCharacterEncoding("UTF-8")。
需要配置web.xml 激活该Filter。
三、在JSP头部声明:<%@ page contentType="text/html;charset= UTF-8" %>。
四、在Jsp的html代码中,声明UTF-8:<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
五、设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
一般数据库都可以通过管理设置设定UTF-8
六、其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。
七、如果使用的是tomcat服务器,那么修改在${tomcat_home}/conf/中的server.xml文件:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />
或者改为:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" useBodyEncodingForURI="true" />
都能达到很好的效果。
1.在tomcat中设置一下字符集;
2.在读取xml或者数据库的时候就设置字符集;
要知道UTF-8就是unicode码,而ISO8859-1是西方符号编码,也就是说里面是不带中文字符的,所以转换成ISO8859-1肯定是没法认的,所以显示"?"。
忘记了ISO8859-8还是多少来着才可以。
最好先去差一下编码集
try
{
str = new String(str.getBytes("UTF-8"), "iso-8859-1");
}
iso-8859-1字符集里面有中文吗?
在mysql安装路径下有一个my.ini文件设置default-character-set=GBK
现在不做Java了,快忘记了。1 先讲原理:XML传过来是 UTF-8编码的,你只有getBytes("UTF-8")才可以正确取得到。然后转换成正确的编码.
比如你是从一个xml文件提交到一个Jsp的,在getParameter()之前,你就应该设置好request流的编码格式request.setCharacterEncoding("UTF-8")。要不然,getParameter会采用默认的编码来转换,到时你得到的可能会有一些?号出现。告诉你一个根本原则:
你用getBytes("ISO8859-1"),把你得到的字节码打印出来,看是什么编码(这需要你对各种编码了解,如果有资料,需要学习二个小时就差不多知道各种编码了,在网上找资料学习大概要二天时间)。知道是什么编码后再用 getBytes("编码");得到然后转换你要的编码。不过就你的情况来看,我怀疑你在getBytes()之前编码就乱了。所以才会出现乱码,你现在的解码好像没有什么问题。因为UTF-8是用1-3个字节来表示编码的,而其它编码要么是一个字节,要么是二个字节。好成对,就算错了,也容易恢复,但UTF-8是奇数,错了,就恢复不了了。
1,首先mysql数据库是utf-8的编码,目前我在字段中的内容即为一个xml文件的内容:
数据库表--page---里面有一个字段xml_config,其中有一条记录对应的这个字段的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
<page title="登陆" desc="美丽的地方" banner="/image/test.jpg" article="login" encode="UTF-8" align="0" showMode="0" maxListCount="12">
<ico url="/image/ico/1.png"></ico>
</page>
</xml-body> 其中这个里面encoding="UTF-8"。
2,保存了这个数据库内容后,page title="登陆"处马上成为page title="??"的格式,我现在认为目前,这个为数据库把内容转为“UTF-8”编码格式。3,然后,我将有一个叫做Pageconfig的类,作用就是专门去取这个里边的内容,具体过程还有其他的类的作用,取这个里面的比如title,desc,banner这些xml属性的内容是用这个方法。代码片断如下:
static PageConfig newPageConfig(String xml)
{
SAXBuilder builder = new SAXBuilder();
PageConfig ret = new PageConfig();
try
{
InputStream st = new ByteArrayInputStream(xml.getBytes("ISO8859-1"));//这里我先按照数据库的编码方式“ISO8859-1”取到标准码。Document doc = builder.build(st);
Element root = doc.getRootElement();Element page = root.getChild("page");ret.title = new String(page.getAttributeValue("title").getBytes("UTF-8"),"UTF-8");//然后转成了UTF-8的格式,以便我有一个叫filter类的output函数生成wml页面去显示给用户,所以我现在需要在pageConfig类中首先转化title为UTF-8格式。fiter的函数output首先转化这个title的内容为ISO8859-1,然后转化为UTF-8public void outPut(String str)
{
try
{
str = new String(str.getBytes("UTF-8"), "iso-8859-1");
}
catch (UnsupportedEncodingException e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}ServletOutputStream out = null;
try
{
out = response.getOutputStream();
out.println(str);
}
catch (IOException ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
看看我目前的这个思路是否正确?
我估计是不正常的。一般而言,文本文件保存时采用本地编码,中文windows采用gbk编码,然而你的xml头中申明了utf-8,造成了不统一,如果不用特殊方法解析,在内存中从读入文件开始就是错的了。而且转不出来。再试试看,<?xml version="1.0" encoding="UTF-8"?>
改成<?xml version="1.0" encoding="GBK"?>
或者<?xml version="1.0" encoding="GB2312"?>
再用IE测试一下,估计会正常了。关于xml文件出现乱码,一般都与java.io下面的reader/writer有关,因为它们使用本地默认编码。但在xml文件中,xml文件有自己的一套,不一定采用这些编码。关注
<?xml version="1.0" encoding="GBK"?>
2, 在访问数据库的配置文件中,访问mysql的url 参数修改为:useUnicode=true&characterEncoding=GBK;
3,在我的Pageconfig的类修改取xml的xml.getBytes("ISO8859-1"));
InputStream st = new ByteArrayInputStream(xml.getBytes("ISO8859-1"));
这个我先前也曾经尝试过,但没有匹配成功;
4,需要修改mysql数据库的默认编码:
default-character-set=GBK
default-collation=GBK5,关于以下的取值,不做任何转码;
ret.title =page.getAttributeValue("title");
6,因为我有一个专门最后生成wml页面的转码的类,将会转成utf-8格式;完,谢谢大家!!!