Xstream со специальными символами - PullRequest
0 голосов
/ 09 марта 2011

Я работаю с 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());

Ответы [ 3 ]

1 голос
/ 10 марта 2011

Наконец, это работает !!!

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

response.getOutputStream().write(xml.getBytes("UTF-8"));
1 голос
/ 09 марта 2011

Это прямо в Javadoc .

Writer w = new OutputStreamWriter(new FileOutputStream("test.xml"), "UTF-8");
XStream.toXML(object, w);
0 голосов
/ 08 января 2019

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

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

«Специальные символы» портятся при открытии XML в текстовом редакторе; Дело в том, что вы не должны открывать XML в текстовом редакторе!

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

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

...