我目前正在Android Studio项目(java)中工作,我需要导出具有特定编码“ Windows-1252”的Xml文件。
尽管已经选择了哪种编码方式,但我一直尝试这样做了几个小时(示例A),尽管生成的文件在第一行Xml行中具有“正确”编码方式“ ... encoding =” Windows-1252'“:
Xml文件中的字符用“&#xxx;”“转义”
使用记事本++打开文件,它检测到“ UTF-8”编码(而不是所需的“ Windows-1252”)
<?xml version='1.0' encoding='windows-1252' ?><test><message>áéíóúãõç</message></test>
为确保“流”正确,我创建了一个没有“ XmlSerializer”的新示例(示例B),结果文件要好得多:
<?xml version='1.0' encoding='windows-1252' ?><test><message>áéíóúãõç</message></test>
private void doDebug01(){
File dstPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
try {
//EXAMPLE A
File dstFile = new File(dstPath, "test.xml");
FileOutputStream dstFOS = new FileOutputStream(dstFile);
OutputStream dstOS= new BufferedOutputStream(dstFOS);
OutputStreamWriter dstOSW = new OutputStreamWriter(dstOS, "windows-1252");
XmlSerializer dstXml = Xml.newSerializer();
dstXml.setOutput(dstOSW);
dstXml.startDocument("windows-1252", null);
dstXml.startTag(null,"test");
dstXml.startTag(null,"message");
dstXml.text("áéíóúãõç");
dstXml.endTag(null,"message");
dstXml.endTag(null,"test");
dstXml.endDocument();
dstXml.flush();
dstOSW.close();
//EXAMPLE B
File dstFileB = new File(dstPath, "testb.xml");
FileOutputStream dstFOSB = new FileOutputStream(dstFileB);
OutputStream dstOSB= new BufferedOutputStream(dstFOSB);
OutputStreamWriter dstOSWB = new OutputStreamWriter(dstOSB, "windows-1252");
dstOSWB.write("<?xml version='1.0' encoding='windows-1252' ?>");
dstOSWB.write("<test>");
dstOSWB.write("<message>áéíóúãõç</message>");
dstOSWB.write("</test>");
dstOSWB.flush();
dstOSWB.close();
}
catch (IOException e) {
Log.e("DEBUG", e.getMessage());
e.printStackTrace();
}
}
因此,现在我很困惑,并被示例B的结果所困,因为我不知道我的问题(A)是驻留在“ XmlSerializer”还是在“ streams”参数上。
我在代码(A)中缺少什么,以便获得带有在“ Windows-1252”(或至少与示例B最接近)中编码的正确字符/文件的Xml?