程序如下:
import java.io.*;
import org.apache.xerces.dom.DocumentImpl;
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
import org.w3c.dom.Element;
public class XMLChineseTest {
public static void main(String[] argv) {
try {
Document doc = new DocumentImpl();
doc.setEncoding("UTF-8");
Element root = doc.createElement("test-root");
doc.appendChild(root);
Element firstChild = doc.createElement("test-attribute");
firstChild.setAttribute("attr", "中文测试");
root.appendChild(firstChild);
OutputFormat format = new OutputFormat(doc);
format.setLineSeparator("\n");
format.setIndenting(true);
format.setEncoding("UTF-8");
FileWriter fout = new FileWriter("test.xml");
XMLSerializer serial = new XMLSerializer(fout, format);
serial.asDOMSerializer();
serial.serialize(doc.getDocumentElement());
fout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
得到的XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="中文测试"/>
</test-root>
正确的UTF的XML应该是:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="涓��娴��"/>
</test-root>
求助,谢谢!
23 个解决方案
#1
firstChild.setAttribute("attr", new String("中文测试","ISO-8859-1");
i forgot the encode type,may be using DEFAULT and if your JDK is internation editor,or try modify ISO-8859-1 to gb2312
i forgot the encode type,may be using DEFAULT and if your JDK is internation editor,or try modify ISO-8859-1 to gb2312
#2
改成
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"ISO-8859-1"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="����������������"/>
</test-root>
------------------------------------
改成
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"GB2312"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="中文测试"/>
</test-root>
------------------------------------
请看清我的问题:我现在能正确输出GB的中文,但是我需要的是UTF-8的!
BTW:
改成:
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"UTF-8"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr=""/>
</test-root>
………………
在我看来这个问题值200分的!
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"ISO-8859-1"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="����������������"/>
</test-root>
------------------------------------
改成
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"GB2312"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="中文测试"/>
</test-root>
------------------------------------
请看清我的问题:我现在能正确输出GB的中文,但是我需要的是UTF-8的!
BTW:
改成:
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"UTF-8"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr=""/>
</test-root>
………………
在我看来这个问题值200分的!
#3
ic,but i at hometown at netbar,not setup java and anymore,so faint
#4
原来如此,多谢了,UP!!!
#5
有没有人知道?
#6
javac -encoding UTF-8 xxx.java 试试
#7
因为直接运行上面的程序(中文是写在程序里面的GB码)会产生???????,我运行了本来的程序,结果……
所有的中文……都……还是GB的……
呜呼呀……
所有的中文……都……还是GB的……
呜呼呀……
#8
up
#9
好变态的问题,好像无解.
不过给你一个变态解法
System.out.println(new String("中文测试".getBytes("iso_8859-1"),"utf-8"));
这是输出 ????
不过给你一个变态解法
System.out.println(new String("中文测试".getBytes("iso_8859-1"),"utf-8"));
这是输出 ????
#10
mark
#11
to Asprilla(dont shoot me)
能说得详细一些?
???是不行的,一定要是正确的,可以被任何一个XML编辑器打开的UTF-8的中文……
能说得详细一些?
???是不行的,一定要是正确的,可以被任何一个XML编辑器打开的UTF-8的中文……
#12
doc.setEncoding("UTF-8");这一句从何而来?
你的程序中hardcode的"中文测试"是什么编码,写到XML中自然是什么编码。因此换一个UTF-8的编辑器将你的程序中的“中文测试”换成UTF-8保存就可以了。
你的程序中hardcode的"中文测试"是什么编码,写到XML中自然是什么编码。因此换一个UTF-8的编辑器将你的程序中的“中文测试”换成UTF-8保存就可以了。
#13
有的Parser有doc.setEncoding("UTF-8");方法。
如果是手工的话我当然知道了,通过Java Code有没有什么办法呢?
如果是手工的话我当然知道了,通过Java Code有没有什么办法呢?
#14
JFC似乎没有方便的转码方法,不过JDK有一个native2ascii工具可以用于转码成Latin-1 和 Unicode-encoded (\u####)字符
#15
发现The JavaTM Tutorial讲诉了转码的问题,参见:
http://java.sun.com/docs/books/tutorial/i18n/text/convertintro.html
http://java.sun.com/docs/books/tutorial/i18n/text/convertintro.html
#16
http://expert.csdn.net/Expert/topic/1388/1388190.xml?temp=.3039209
#17
xml使用 uft-8 编码,原来就是 中文的 就显示为中文,是日文就显示成日文,utf-8编码是为了统一编码才出现的,你要向别的办法了
只有你本来的字符是
"涓��娴��"
的时候,才能输出成这样的
只有你本来的字符是
"涓��娴��"
的时候,才能输出成这样的
#18
to All
"涓��娴��"
不是我原文件的内容,这个是CSDN转码后的结果,原来的内容就是标准的乱码的UTF-8。
我问这个问题的原因是WSAD在存储XML的时候做字符转化,不知道各位有没有用过WSAD。我可以向WSAD的XML编辑器里面输入GB中文,但是只要我指定了<?xml version="1.0" encoding="UTF-8"?>这句,存储的时候这个文件中所有的GB中文都变成UTF了。
所以我觉得应该是有办法解决这个问题的,求救!
"涓��娴��"
不是我原文件的内容,这个是CSDN转码后的结果,原来的内容就是标准的乱码的UTF-8。
我问这个问题的原因是WSAD在存储XML的时候做字符转化,不知道各位有没有用过WSAD。我可以向WSAD的XML编辑器里面输入GB中文,但是只要我指定了<?xml version="1.0" encoding="UTF-8"?>这句,存储的时候这个文件中所有的GB中文都变成UTF了。
所以我觉得应该是有办法解决这个问题的,求救!
#19
我用JAXB+xml schema时当输出XML时中文全部转换成UTF-8,即:〹⿊
我想用的是中文的内容。
请问:UTF8如何转换成中文的GB?
我想用的是中文的内容。
请问:UTF8如何转换成中文的GB?
#20
hi,
当你写文件的时候不要用writer, 应该用outPutStream. writer会自动把String 转换成系统却省的encoding. 因为你的系统是中文的,所以你看到的总是GB2312或者GBK.
当你写文件的时候不要用writer, 应该用outPutStream. writer会自动把String 转换成系统却省的encoding. 因为你的系统是中文的,所以你看到的总是GB2312或者GBK.
#21
up
#22
iso_8859-1<- ->utf-8
#23
to hellking(信息孤岛)
你的做法是正确的,谢谢!
你的做法是正确的,谢谢!
#1
firstChild.setAttribute("attr", new String("中文测试","ISO-8859-1");
i forgot the encode type,may be using DEFAULT and if your JDK is internation editor,or try modify ISO-8859-1 to gb2312
i forgot the encode type,may be using DEFAULT and if your JDK is internation editor,or try modify ISO-8859-1 to gb2312
#2
改成
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"ISO-8859-1"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="����������������"/>
</test-root>
------------------------------------
改成
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"GB2312"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="中文测试"/>
</test-root>
------------------------------------
请看清我的问题:我现在能正确输出GB的中文,但是我需要的是UTF-8的!
BTW:
改成:
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"UTF-8"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr=""/>
</test-root>
………………
在我看来这个问题值200分的!
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"ISO-8859-1"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="����������������"/>
</test-root>
------------------------------------
改成
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"GB2312"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr="中文测试"/>
</test-root>
------------------------------------
请看清我的问题:我现在能正确输出GB的中文,但是我需要的是UTF-8的!
BTW:
改成:
firstChild.setAttribute("attr", new String("中文测试".getBytes(),"UTF-8"));
的结果:
<?xml version="1.0" encoding="UTF-8"?>
<test-root>
<test-attribute attr=""/>
</test-root>
………………
在我看来这个问题值200分的!
#3
ic,but i at hometown at netbar,not setup java and anymore,so faint
#4
原来如此,多谢了,UP!!!
#5
有没有人知道?
#6
javac -encoding UTF-8 xxx.java 试试
#7
因为直接运行上面的程序(中文是写在程序里面的GB码)会产生???????,我运行了本来的程序,结果……
所有的中文……都……还是GB的……
呜呼呀……
所有的中文……都……还是GB的……
呜呼呀……
#8
up
#9
好变态的问题,好像无解.
不过给你一个变态解法
System.out.println(new String("中文测试".getBytes("iso_8859-1"),"utf-8"));
这是输出 ????
不过给你一个变态解法
System.out.println(new String("中文测试".getBytes("iso_8859-1"),"utf-8"));
这是输出 ????
#10
mark
#11
to Asprilla(dont shoot me)
能说得详细一些?
???是不行的,一定要是正确的,可以被任何一个XML编辑器打开的UTF-8的中文……
能说得详细一些?
???是不行的,一定要是正确的,可以被任何一个XML编辑器打开的UTF-8的中文……
#12
doc.setEncoding("UTF-8");这一句从何而来?
你的程序中hardcode的"中文测试"是什么编码,写到XML中自然是什么编码。因此换一个UTF-8的编辑器将你的程序中的“中文测试”换成UTF-8保存就可以了。
你的程序中hardcode的"中文测试"是什么编码,写到XML中自然是什么编码。因此换一个UTF-8的编辑器将你的程序中的“中文测试”换成UTF-8保存就可以了。
#13
有的Parser有doc.setEncoding("UTF-8");方法。
如果是手工的话我当然知道了,通过Java Code有没有什么办法呢?
如果是手工的话我当然知道了,通过Java Code有没有什么办法呢?
#14
JFC似乎没有方便的转码方法,不过JDK有一个native2ascii工具可以用于转码成Latin-1 和 Unicode-encoded (\u####)字符
#15
发现The JavaTM Tutorial讲诉了转码的问题,参见:
http://java.sun.com/docs/books/tutorial/i18n/text/convertintro.html
http://java.sun.com/docs/books/tutorial/i18n/text/convertintro.html
#16
http://expert.csdn.net/Expert/topic/1388/1388190.xml?temp=.3039209
#17
xml使用 uft-8 编码,原来就是 中文的 就显示为中文,是日文就显示成日文,utf-8编码是为了统一编码才出现的,你要向别的办法了
只有你本来的字符是
"涓��娴��"
的时候,才能输出成这样的
只有你本来的字符是
"涓��娴��"
的时候,才能输出成这样的
#18
to All
"涓��娴��"
不是我原文件的内容,这个是CSDN转码后的结果,原来的内容就是标准的乱码的UTF-8。
我问这个问题的原因是WSAD在存储XML的时候做字符转化,不知道各位有没有用过WSAD。我可以向WSAD的XML编辑器里面输入GB中文,但是只要我指定了<?xml version="1.0" encoding="UTF-8"?>这句,存储的时候这个文件中所有的GB中文都变成UTF了。
所以我觉得应该是有办法解决这个问题的,求救!
"涓��娴��"
不是我原文件的内容,这个是CSDN转码后的结果,原来的内容就是标准的乱码的UTF-8。
我问这个问题的原因是WSAD在存储XML的时候做字符转化,不知道各位有没有用过WSAD。我可以向WSAD的XML编辑器里面输入GB中文,但是只要我指定了<?xml version="1.0" encoding="UTF-8"?>这句,存储的时候这个文件中所有的GB中文都变成UTF了。
所以我觉得应该是有办法解决这个问题的,求救!
#19
我用JAXB+xml schema时当输出XML时中文全部转换成UTF-8,即:〹⿊
我想用的是中文的内容。
请问:UTF8如何转换成中文的GB?
我想用的是中文的内容。
请问:UTF8如何转换成中文的GB?
#20
hi,
当你写文件的时候不要用writer, 应该用outPutStream. writer会自动把String 转换成系统却省的encoding. 因为你的系统是中文的,所以你看到的总是GB2312或者GBK.
当你写文件的时候不要用writer, 应该用outPutStream. writer会自动把String 转换成系统却省的encoding. 因为你的系统是中文的,所以你看到的总是GB2312或者GBK.
#21
up
#22
iso_8859-1<- ->utf-8
#23
to hellking(信息孤岛)
你的做法是正确的,谢谢!
你的做法是正确的,谢谢!