100分请教jsp中读取中文xml出现的乱码问题!
我创建了一个menu-config.xml,内容中包含中文字符,代码如下:
<?xml version="1.0" encoding="gb2312"?>
<MenuConfig>
<Menus>
<Menu name="articlemanagement">
<title>文章管理</title>
<Item name="addarticle" purview="1">
<title>增加文章</title>
<location>/hljhz/addarticle.jspa</location>
</Item>
<Item name="addarticle1" purview="1">
<title>增加文章1</title>
<location></location>
</Item>
</Menu>
<Menu name="messagemanage">
<title>留言管理</title>
<Item name="addmessage" purview="2">
<title>增加留言</title>
<location></location>
</Item>
</Menu>
</Menus>
</MenuConfig>
然后我在jsp中读取这个文件,用的是jstl的标签
代码如下
<%@ page contentType="text/html; charset=gb2312" language="java"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META name="GENERATOR" content="IBM Software Development Platform">
<TITLE>test1.jsp</TITLE>
</HEAD>
<BODY>
<c:import var="docString" url="../WEB-INF/menu-config.xml"/>
<x:parse var="doc" doc="${docString}"/>
<x:set var="d" select="$doc//Menu[@name='articlemanagement']"/>
<x:out select="$d/title"/>
</BODY>
</HTML>
结果在显示title时显示乱码,请问如何解决?
问题点数:120、回复次数:40Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-11 13:12:55 得分 20
我以前没有用dom或者jdom解析gb2312的xml都是没有中文问题的
可能问题是用了dom之类的parser
你可以用native2ascii转一下你的xml,endoing还是默认的
然后页面用utf-8编码
试试Top
2 楼steveyue(约翰岳)回复于 2005-04-11 13:19:24 得分 0
怎么转啊,我用的是jstl的xml标签。再说如果页面用utf-8编码,有些页面中固定的中文会乱码Top
3 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-11 13:22:43 得分 0
我知道你用的jstl标签,背后还是用Dom的
在%JAVA_HOME%/bin里面有个native2ascii.exe
你具体可以查toolsdoc里面的说明Top
4 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-11 13:23:52 得分 0
native2ascii -utf8(编码格式) 转换前的文件名 转换后的文件名Top
5 楼steveyue(约翰岳)回复于 2005-04-11 13:27:23 得分 0
我来试一下Top
6 楼steveyue(约翰岳)回复于 2005-04-11 13:51:01 得分 0
C:\Documents and Settings\haozhong\IBM\rationalsdp6.0\workspace\hljhz\web\WEB-INF>native2ascii -UTF-8 menu-config.xml ss.xml
Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]
这是我用native2ascii.exe时出现的信息,哪出错了?Top
7 楼steveyue(约翰岳)回复于 2005-04-11 14:04:31 得分 0
总提示Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]],哪有错误嘛Top
8 楼vcforever(累)回复于 2005-04-11 15:03:17 得分 0
帮朋友UP一下!:)Top
9 楼steveyue(约翰岳)回复于 2005-04-11 15:07:51 得分 0
具体应该在xml中设置编码为什么,然后使用native2ascii工具设置的编码为什么,然后页面中使用的编码为什么,请详细指出!
我现在在xml中使用gb2312,然后用native2ascii -encoding GB2312 xxx.xml yyy.xml ,页面用gb2312,结果显示出那些\u6587\u7ae0\u7ba1\u7406类的字符,根本没有显示中文,倒底应该怎么做?jstl可以处理这样的问题吗?Top
10 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-11 15:50:20 得分 0
我以前做得时候根本没有使用ascii2native加encoding参数
然后页面统一使用utf-8编码Top
11 楼steveyue(约翰岳)回复于 2005-04-11 15:54:34 得分 0
可是现在出现像我说的这样的情况,问题是不是在于jstl?Top
12 楼kk2486(龙)回复于 2005-04-11 17:16:55 得分 0
是不是还需要象<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>设置x啊?Top
13 楼steveyue(约翰岳)回复于 2005-04-12 08:56:54 得分 0
我用dom4j处理时没有出现这样的问题,用jstl的<x:out select="***"/>标签显示就是乱码,是不是在jstl中有什么默认的字符编码,它不支持中文?有没有高手知道?Top
14 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 12:11:52 得分 0
native2ascii menu-config.xml ss.xml
什么都不要,试试
Top
15 楼steveyue(约翰岳)回复于 2005-04-12 12:47:03 得分 0
没有用,显示的就是\u6587\u7ae0\u7ba1\u7406这类的东西
我在页面前加上
<fmt:requestEncoding value="GB2312"/>
或
<fmt:setLocale value="GB2312"/>
也都没有用Top
16 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-12 12:50:06 得分 0
晕,我已经说了好几次,页面要使用utf-8才能显示\uxxxx的中文啊Top
17 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 12:54:09 得分 0
呵呵,页面,页面。页同。
utf-8 utf-8Top
18 楼hongyan2004(spring+hibernate)回复于 2005-04-12 12:59:46 得分 0
utf-8
Top
19 楼steveyue(约翰岳)回复于 2005-04-12 13:00:30 得分 0
是的,我试了,不管用,你们说的是这样的对不对
menu-config.xml 里用gb2312编码,用native2ascii时也用gb2342编码,即
native2ascii -GB2312 menu-config.xml ss.xml
然后页面用UTF-8,对吧?
我都试了,显示的都是\u6587\u7ae0\u7ba1\u7406这类的东西Top
20 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-12 13:03:05 得分 0
不是的
native2ascii转换的时候不用任何编码
页面使用utf-8
我写struts的时候都是这么做,也一直没有问题啊
呵呵。。。Top
21 楼steveyue(约翰岳)回复于 2005-04-12 13:05:47 得分 0
其实,无论是menu-config.xml采用UTF-8然后页面采用UTF-8,它们之间的这几种可能的组合我都试过了,都是不行,而我用dom4j处理时没有任何问题,只是用jstl的<x:out select="**">时,取出来的才是乱码,所以我想是不是jstl的标签问题,我试着用
<fmt:requestEncoding value="GB2312"/>
或
<fmt:setLocale value="GB2312"/>
仍然没有用。Top
22 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-12 13:09:01 得分 0
jstl默认编码肯定是iso-8859-1
所以你对xml转换的时候不能用什么其他编码Top
23 楼steveyue(约翰岳)回复于 2005-04-12 13:13:22 得分 0
jFresH_MaN(TM)你可能没完全明白我的意思,如你所说的方法,经过native2ascii转换后,用struts中<bean:message key="***"/>或是jstl的<fmt:message key="***"/>读取时确实都没有问题,但是现在我是用jstl中的<x:out select="**"/>标签,它就出现问题了!
对啊,我看jstl的原代码了,发现它默认确实是iso-8859-1,但是如果我指定了
<fmt:requestEncoding value="GB2312"/>
或
<fmt:setLocale value="GB2312"/>
它为什么还是用iso-8859-1?Top
24 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-12 13:16:28 得分 0
你的意思是说不管有没有
<fmt:requestEncoding value="GB2312"/>
或
<fmt:setLocale value="GB2312"/>
页面使用了utf-8编码也是乱码?
我的意思是说,不用管jstl的编码,而直接在页面
<%@ page contentType=".....utf-8
Top
25 楼lasthope(学生)回复于 2005-04-12 13:25:53 得分 0
去掉
<%@ page contentType="text/html; charset=gb2312" language="java"%>
试试Top
26 楼steveyue(约翰岳)回复于 2005-04-12 13:26:00 得分 0
是的,在页面用
<%@ page contentType="text/html; charset=UTF-8" language="java"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META name="GENERATOR" content="IBM Software Development Platform">
<TITLE>test1.jsp</TITLE>
</HEAD>
<BODY>
<c:import var="docString" url="../WEB-INF/menu-config.xml"/>
<x:parse var="doc" doc="${docString}"/>
<x:set var="d" select="$doc//Menu[@name='articlemanagement']"/>
<x:out select="$d/title"/>
</BODY>
</HTML>
这样的代码,由于menu-config.xml经过你说的方法
native2ascii menu-config.xml ss.xml(或是native2ascii -encoding GB2312 menu-config.xml ss.xml) 编码
现在页面就变成了\u6587\u7ae0\u7ba1\u7406这类的东西
根本不显示中文Top
27 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-12 13:29:19 得分 0
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
去掉这个啊Top
28 楼huguangwu(追风少年)回复于 2005-04-12 13:31:00 得分 0
哎,看得我头晕,两者的意思我都没明白,友情UP一下吧Top
29 楼steveyue(约翰岳)回复于 2005-04-12 13:32:58 得分 0
回 lasthope(学生)
如果去掉
<%@ page contentType="text/html; charset=gb2312" language="java"%>
的话,页面中所有的中文都变成乱码了,呵呵
回 jFresH_MaN(TM)
这个
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
这是我刚才照着上面复制过来的,实际上测试时我没有加这个
只有
<%@ page contentType="text/html; charset=UTF-8" language="java"%>
问题依然Top
30 楼steveyue(约翰岳)回复于 2005-04-12 13:35:51 得分 0
回huguangwu(追风少年)
你现在只是晕
我现在脑袋都大了!
呵呵
不知有人用过<x:out select="**"/>标签,出过这样的问题没有?Top
31 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-12 13:49:12 得分 0
哎,我也不知道该怎么搞了!
郁闷
帮你顶吧Top
32 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 13:58:14 得分 0
<?xml version="1.0" encoding="gb2312"?>
<?xml version="1.0" encoding="utf-8"?>
然后用native2ascii menu-config.xml ss.xml
<%@ page contentType="text/html; charset=UTF-8" language="java"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META name="GENERATOR" content="IBM Software Development Platform">
<TITLE>test1.jsp</TITLE>
</HEAD>
<BODY>
<c:import var="docString" url="../WEB-INF/menu-config.xml"/>
<x:parse var="doc" doc="${docString}"/>
<x:set var="d" select="$doc//Menu[@name='articlemanagement']"/>
<x:out select="$d/title"/>
</BODY>
</HTML>
老大你全用,utf8改完试试。
Top
33 楼steveyue(约翰岳)回复于 2005-04-12 14:05:54 得分 0
回 jianghuxing(回头看看原来我一无所有) 我上面已经说了,这几种组合我全都试过了,
-----------------------------
menu-config.xml | jsp页面
-----------------------------
gb2312 | UTF-8
UTF-8 | gb2312
GBK | UTF-8
UTF-8 | GBK
UTF-8 | UTF-8
gb2312 | gb2312
GBK | GBK
-----------------------------
够全的了吧!!!!!!!
我现在试图把jstl的源代码改了呢,把默认的编码改成UTF-8,再重新给它编绎,打包!Top
34 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 14:50:09 得分 0
<%@ page contentType="text/html; charset=gb2312" language="java"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<HTML>
<HEAD>
<META name="GENERATOR" content="IBM Software Development Platform">
<TITLE>test1.jsp</TITLE>
</HEAD>
<BODY>
<c:import var="docString" url="//WEB-INF//ss.xml"/>
<x:parse var="doc">
<?xml version="1.0" encoding="gb2312"?>
<MenuConfig>
<Menus>
<Menu name="articlemanagement">
<title>文章管理</title>
<Item name="addarticle" purview="1">
<title>增加文章</title>
<location>/hljhz/addarticle.jspa</location>
</Item>
<Item name="addarticle1" purview="1">
<title>增加文章1</title>
<location></location>
</Item>
</Menu>
<Menu name="messagemanage">
<title>留言管理</title>
<Item name="addmessage" purview="2">
<title>增加留言</title>
<location></location>
</Item>
</Menu>
</Menus>
</MenuConfig>
</x:parse>
<x:set var="d" select="$doc//MenuConfig//Menus//Menu[@name='articlemanagement']"/>
<x:out select="$d/title"/>
</BODY>
</HTML>
楼主试试。Top
35 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 14:51:14 得分 0
我测试成功了Top
36 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 15:11:17 得分 100
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<HTML>
<HEAD>
<META name="GENERATOR" content="IBM Software Development Platform">
<TITLE>test1.jsp</TITLE>
</HEAD>
<BODY>
<c:import var="docString" charEncoding="gb2312" url="//WEB-INF//menu-config.xml"/>
<x:parse var="doc" xml="${docString}"/>
<x:set var="d" select="$doc//MenuConfig//Menus//Menu[@name='articlemanagement']"/>
<x:out select="$d/title"/>
</BODY>
</HTML>
Top
37 楼steveyue(约翰岳)回复于 2005-04-12 15:39:21 得分 0
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!
jianghuxing(回头看看原来我一无所有)太谢谢了
在<c:import/>里加上charEncoding="gb2312"
就ok了,爽!!
加分加分!
Top
38 楼dxtjjevans(大虫)回复于 2005-04-12 15:48:33 得分 0
upTop
39 楼steveyue(约翰岳)回复于 2005-04-12 15:54:40 得分 0
TMD,我差点就改了人家jstl的源码!呵呵
Top
40 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-12 15:56:13 得分 0
呵呵,UPTop




