Android (Java) XmlSerializer не кодирует "Windows-1252" - PullRequest
0 голосов
/ 02 апреля 2019

В настоящее время я работаю в проекте Android Studio (java), и мне нужно экспортировать файл XML с определенной кодировкой «Windows-1252».

Я пытался сделать это в течение нескольких часов (ПРИМЕР А), и независимо от того, какую кодировку я выбрал, хотя полученный файл имеет "правильную" кодировку в первой строке XML "... encoding = ' окна-1252 ":

  • символы в файле XML "экранированы" с помощью "& # xxx;"

  • открывая файл с помощью notepad ++, он обнаруживает кодировку "UTF-8" (не желаемую "Windows-1252")

  • <?xml version='1.0' encoding='windows-1252' ?><test><message>&#225;&#233;&#237;&#243;&#250;&#227;&#245;&#231;</message></test>

Чтобы убедиться, что «потоки» были правильными, я создал новый образец (ПРИМЕР Б) без «XmlSerializer», и файл результатов был намного лучше:

  • символы в файле 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" или в параметрах "потоков".

Чего мне не хватает в моем коде (A), чтобы получить Xml с правильными символами / файлом, закодированным в «Windows-1252» (или, по крайней мере, ближе всего к ПРИМЕРУ B)?

...