Xstream со специальными символами

Я работаю с XStream, но у меня проблема со специальными символами á,é,í,ó,ú и ñ.

Я пробовал это:

  String charset = "UTF-8";
  xstream = new XStream(new DomDriver(charset));

(не работает)

Я обнаружил, что XStream сам по себе не выполняет кодировку символов, он полагается на конфигурацию базового средства записи XML. По умолчанию он использует свой собственный PrettyPrintWriter, который записывает в кодировку по умолчанию для текущей локали. Чтобы записать UTF-8, вы должны сами предоставить Writer соответствующую кодировку.

Моя проблема в том, что я не знаю, как предоставить Writer...

// get the model from the map passed created by the controller
Object model = map.get("model");

Object viewData = transformViewData(model);

//TEST
Writer w = new OutputStreamWriter(viewData, "UTF-8");
//FINTEST

// if the model is null, we have an exception
String xml = null;
if (viewData != null){
    xml = xstream.toXML(viewData, w);  //Err:Cannot find symbol...
}else{
    // so render entire map
    xml = xstream.toXML(map, w); //Err:Cannot find symbol...
}

response.getOutputStream().write(xml.getBytes());

person JMira    schedule 09.03.2011    source источник


Ответы (3)


Это прямо в javadoc.

Writer w = new OutputStreamWriter(new FileOutputStream("test.xml"), "UTF-8");
XStream.toXML(object, w);
person JB Nizet    schedule 09.03.2011
comment
У меня нет файла XML, я получаю данные с карты. - person JMira; 09.03.2011
comment
Строка new OutputStreamWriter(viewData, UTF-8) недействительна. OutputStreamWriter принимает OutputStream в качестве аргумента. Куда вы хотите отправить свой XML? - person JB Nizet; 09.03.2011
comment
Для веб-браузера эта часть работает нормально, проблема заключается в специальных символах. - person JMira; 09.03.2011
comment
это не работает так хорошо, если у вас есть проблемы с кодировкой. Замените новый FileOutputStream(test.xml) в моем примере на response.getOutputStream() и используйте response.setCharacterEncoding(UTF-8) - person JB Nizet; 10.03.2011

Наконец-то работает!!!

Я исправляю это, добавляя «UTF-8» в xml.getByte():

response.getOutputStream().write(xml.getBytes("UTF-8"));
person JMira    schedule 10.03.2011

На самом деле, я чувствую здесь некоторую путаницу.

Xstream прекрасно справляется со своей задачей, позвольте мне объяснить, почему.

«Специальные символы» искажаются, когда вы открываете xml в текстовом редакторе; дело в том, что вы вообще не должны открывать xml в текстовом редакторе!

Имейте в виду, что Xml и Html являются языками-побратимами (первый предназначен для передачи данных, второй предназначен для отображения данных), и, как и файлы html, файлы xml должны открываться веб-браузером.

Таким образом, Xstream заменяет «специальные символы» в строке, чтобы вы могли правильно прочитать ее в веб-браузере.

person BabaNew    schedule 08.01.2019