我有一个包含非标准字符的 XML 文件(如奇怪的“引号”)。
我使用 UTF-8 / ISO / ascii + unmarshalled 读取了 XML:
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())));
我有一个 oracle 函数,它将采用 iso-8859-1 代码,并将它们转换/映射为“文字”符号。即:“’”=>“左单引号”
JAXB 使用 iso 解组,显示带有 iso 转换的字符。即所有奇怪的单引号都将被编码为“’”
所以假设我的字符串是:10-11 岁的班级(注意奇怪的 - 在 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 文件阅读器读取了文件,它输出了上面的字符串很好]
我遇到的问题是使用 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())));
徒劳无功。
任何想法如何在 jaxb 中获取 iso-8859-1 编码字符?