В настоящее время я работаю в проекте 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>áéíóúãõç</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)?