Android(java)XmlSerializer未编码为“ Windows-1252”

时间:2019-04-02 16:14:26

标签: java android encoding xmlserializer

我目前正在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>&#225;&#233;&#237;&#243;&#250;&#227;&#245;&#231;</message></test>

为确保“流”正确,我创建了一个没有“ XmlSerializer”的新示例(示例B),结果文件要好得多:

  • Xml文件中的字符现在正确(无法转义)
  • 使用notepad ++打开文件,它会检测到“ ANSI”编码(而不是所需的“ Windows-1252”)
  • <?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?

0 个答案:

没有答案