У меня есть файл XML, содержащий нестандартные символы (например, странную «кавычку»).
Я прочитал XML, используя UTF-8/ISO/ascii + неупорядочил его:
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream()),"ISO-8859-1"));
String output;
StringBuffer sb = new StringBuffer();
while ((output = br.readLine()) != null) {
//fetch XML
sb.append(output);
}
try {
jc = JAXBContext.newInstance(ServiceResponse.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
ServiceResponse OWrsp = (ServiceResponse) unmarshaller
.unmarshal(new InputSource(new StringReader(sb.toString())));
У меня есть функция оракула, которая будет принимать коды iso-8859-1 и преобразовывать/сопоставлять их с «буквальными» символами. то есть: "’" => "левая одинарная кавычка"
JAXB unmarshal с использованием iso, отображает символы с преобразованием iso в порядке. то есть все странные одинарные кавычки будут закодированы как "’"
поэтому предположим, что моя строка: класс 10–11 лет (обратите внимание на странность — от 11 до года)
jc = JAXBContext.newInstance(ScienceProductBuilderInfoType.class);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
//save a temp file
File file2 = new File("tmp.xml");
это сохранит в файле:
class of 10–11‐year‐olds. (what i want..so file saving works!)
[примечание: я прочитал файл с помощью программы чтения файлов java, и он выводит указанную выше строку в порядке]
у меня проблема в том, что представление STRING с использованием jaxb unmarshaller имеет странный вывод, по какой-то причине я не могу получить строку для представления –.
когда я 1: проверьте неупорядоченный вывод xml:
class of 10?11?year?olds
2: Выходной файл:
class of 10–11‐year‐olds
я даже пытался прочитать файл из сохраненного XML, а затем разобрал его (в надежде получить - в моей строке)
String sCurrentLine;
BufferedReader br = new BufferedReader(new FileReader("tmp.xml"));
StringBuffer sb = new StringBuffer();
while ((sCurrentLine = br.readLine()) != null) {
sb.append(sCurrentLine);
}
ScienceProductBuilderInfoType rsp = (ScienceProductBuilderInfoType) unm
.unmarshal(new InputSource(new StringReader(sb.toString())));
бесполезно.
есть идеи, как получить кодированный символ iso-8859-1 в jaxb?