现有一个UTF-8格式的XML文件,通过SAX方式进行解析,中文没问题,但有些特殊的符号会显示为问号(如x的3次方中的那个上标3就变成问号);
自己写生成XML文件的方法(由于种种原因,不采用现成XML解析器),要使生成的XML文件为UTF-8格式,但生成的中文,特殊符号好象不对。
各位,有没有谁碰到类似的问题?望赐教!关于XML文件的解析,生成问题
自己写生成XML文件的方法(由于种种原因,不采用现成XML解析器),要使生成的XML文件为UTF-8格式,但生成的中文,特殊符号好象不对。
各位,有没有谁碰到类似的问题?望赐教!关于XML文件的解析,生成问题
解决方案 »
- 解释一下Java中的继承,都继承到什么了
- 一个数组是12 22 22 2 4 6怎么输出他的所有排列
- 一段代码,问几个菜鸟问题,已经标注出来了。
- 谁来帮我讲解一下这道题~~~谢谢
- 线程池能提高处理速度??
- jTree保存select和expand状态的例子,我从国外网上下的,可是,还是不能用,我实在看不懂,大家帮我看吧!
- 请教各大侠:连接池中那个连接资源泄露?谢谢
- JAVA窗口好丑
- 关闭连接的正确方法??
- 关于事件处理
- 奇怪的重载overloading?我该调用哪个???
- 任何避免遍历ArrayList的时候抛出java.util.ConcurrentModificationException异常
java内部用的Unicode,
win用的GBK子集
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
LnTemplateSaxXmlReader reader = new LnTemplateSaxXmlReader(this);
InputSource is = new InputSource(new FileInputStream(fileName));
// is.setEncoding("UTF-8");
sp.parse(is, reader);
//====== 写XML文件
FileWriter writer = new FileWriter(fname);
//写文件头
writer.write(StringProcess.toUTF8("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"));
writer.write(StringProcess.toUTF8("<"));
writer.write(StringProcess.toUTF8(Iec61850ConstDef.Name_DataTypeTemplates));
writer.write(StringProcess.toUTF8(">\n"));
//写LNodeType
if (lnodeTypes.size() > 0)
{
for (LNodeType e : lnodeTypes)
{
writer.write(StringProcess.toUTF8(e.toStartXmlString()));
writer.write(StringProcess.toUTF8("\n"));
int doNum = e.getDONum();
for(int i = 0; i < doNum; i ++)
{
writer.write(StringProcess.toUTF8(e.getDOByIndex(i).toXmlString()));
writer.write(StringProcess.toUTF8("\n"));
}
writer.write(StringProcess.toUTF8(e.toEndXmlString()));
writer.write(StringProcess.toUTF8("\n"));
}
}
//=================================
public static String toUTF8(String str)
{
System.out.println("=== src:" + str);
if(str==null) str="";
else
{
try
{
str= new String(str.getBytes(),"UTF-8");
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
System.out.println("=== utf:" + str);
return str;
}
//=============用ultraEdit打开时:
<EnumVal ord="23">掳C</EnumVal>
<EnumVal ord="24">Sv</EnumVal>
<EnumVal ord="25">F</EnumVal>
<EnumVal ord="26">C</EnumVal>
<EnumVal ord="27">S</EnumVal>
<EnumVal ord="28">H</EnumVal>
<EnumVal ord="29">V</EnumVal>
<EnumVal ord="30">ohm</EnumVal>
<EnumVal ord="31">J</EnumVal>
<EnumVal ord="32">N</EnumVal>
<EnumVal ord="33">Hz</EnumVal>
<EnumVal ord="34">lx</EnumVal>
<EnumVal ord="35">Lm</EnumVal>
<EnumVal ord="36">Wb</EnumVal>
<EnumVal ord="37">T</EnumVal>
<EnumVal ord="38">W</EnumVal>
<EnumVal ord="39">Pa</EnumVal>
<EnumVal ord="41">m虏</EnumVal>
<EnumVal ord="42">m鲁</EnumVal>
<EnumVal ord="43">m/s</EnumVal>
<EnumVal ord="44">m/s虏</EnumVal>
<EnumVal ord="45">m鲁/s</EnumVal>
<EnumVal ord="46">m/m鲁</EnumVal>
<EnumVal ord="47">M</EnumVal>
<EnumVal ord="48">kg/m鲁</EnumVal>
<EnumVal ord="49">m虏/s</EnumVal>
<EnumVal ord="50">W/m K</EnumVal>
<EnumVal ord="51">J/K</EnumVal>
<EnumVal ord="52">ppm</EnumVal>
<EnumVal ord="53">1/s</EnumVal>
<EnumVal ord="54">rad/s</EnumVal>
<EnumVal ord="61">VA</EnumVal>
<EnumVal ord="62">Watts</EnumVal>
<EnumVal ord="63">VAr</EnumVal>
<EnumVal ord="64">phi</EnumVal>
<EnumVal ord="65">cos(phi)</EnumVal>
<EnumVal ord="66">Vs</EnumVal>
<EnumVal ord="67">V虏</EnumVal>
<EnumVal ord="68">As</EnumVal>
<EnumVal ord="69">A虏</EnumVal>
<EnumVal ord="70">A虏t</EnumVal>
<EnumVal ord="71">VAh</EnumVal>
<EnumVal ord="72">Wh</EnumVal>
<EnumVal ord="73">VArh</EnumVal>
<EnumVal ord="74">V/Hz</EnumVal>//在ultraEdit中将xml由UTF-3转为ASCII时,所对应内容如下:(其中标红内容为上标,这些上标内容变成了问号)
<EnumVal ord="23">°C</EnumVal>
<EnumVal ord="24">Sv</EnumVal>
<EnumVal ord="25">F</EnumVal>
<EnumVal ord="26">C</EnumVal>
<EnumVal ord="27">S</EnumVal>
<EnumVal ord="28">H</EnumVal>
<EnumVal ord="29">V</EnumVal>
<EnumVal ord="30">ohm</EnumVal>
<EnumVal ord="31">J</EnumVal>
<EnumVal ord="32">N</EnumVal>
<EnumVal ord="33">Hz</EnumVal>
<EnumVal ord="34">lx</EnumVal>
<EnumVal ord="35">Lm</EnumVal>
<EnumVal ord="36">Wb</EnumVal>
<EnumVal ord="37">T</EnumVal>
<EnumVal ord="38">W</EnumVal>
<EnumVal ord="39">Pa</EnumVal>
<EnumVal ord="41">m2</EnumVal>
<EnumVal ord="42">m3</EnumVal>
<EnumVal ord="43">m/s</EnumVal>
<EnumVal ord="44">m/s2</EnumVal>
<EnumVal ord="45">m3/s</EnumVal>
<EnumVal ord="46">m/m3</EnumVal>
<EnumVal ord="47">M</EnumVal>
<EnumVal ord="48">kg/m3</EnumVal>
<EnumVal ord="49">m2/s</EnumVal>
<EnumVal ord="50">W/m K</EnumVal>
<EnumVal ord="51">J/K</EnumVal>
<EnumVal ord="52">ppm</EnumVal>
<EnumVal ord="53">1/s</EnumVal>
<EnumVal ord="54">rad/s</EnumVal>
<EnumVal ord="61">VA</EnumVal>
<EnumVal ord="62">Watts</EnumVal>
<EnumVal ord="63">VAr</EnumVal>
<EnumVal ord="64">phi</EnumVal>
<EnumVal ord="65">cos(phi)</EnumVal>
<EnumVal ord="66">Vs</EnumVal>
<EnumVal ord="67">V2</EnumVal>
<EnumVal ord="68">As</EnumVal>
<EnumVal ord="69">A2</EnumVal>
<EnumVal ord="70">A2t</EnumVal>
<EnumVal ord="71">VAh</EnumVal>
<EnumVal ord="72">Wh</EnumVal>
<EnumVal ord="73">VArh</EnumVal>
<EnumVal ord="74">V/Hz</EnumVal>
Element EnumVal = document.addElement("EnumVal ");
EnumVal .addCDATA(str);//这个方法可以去掉特殊字符
现在情况是:加载解析XML文件时,特殊符号就变成问号了,另外生成XML文件方法自己写,不采用现成的XML解析器
采用下面方法即可
java.io.FileOutputStream writerStream = new java.io.FileOutputStream(FileProcess.getTempPath(true) + ModelPubDef.FILE_substationXML);
writer = new java.io.BufferedWriter(new java.io.OutputStreamWriter(writerStream, "UTF-8"));
然后再写具体数据