我想阅读下面的 XML 内容,并且我正在使用 JAXB 解析器进行转换 XML 到对象。 XML 文档采用 UTF-8 格式,其中包含一些 utf-8 我没有通过我的对象但得到的字符??? 相反。
XML 文件数据:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CallDetails>
<APPOINTMENTDATE>29.11.2016</APPOINTMENTDATE>
<APPOINTMENTTIME>29.11.2016 11:11:00</APPOINTMENTTIME>
<ASCCODE>83000220</ASCCODE>
<CALLDESC>작동불</CALLDESC>
<CALLRECEIVEDBY>김정권</CALLRECEIVEDBY>
<CALLRECEIVEDMODECODE></CALLRECEIVEDMODECODE>
<CALLREGBYCAT></CALLREGBYCAT>
<CALLREGBYCODE></CALLREGBYCODE>
<CALLREGDATE>29.11.2016</CALLREGDATE>
<CALLREGTIME>29.11.2016 09:11:00</CALLREGTIME>
<CALLTYPECODE>SVC</CALLTYPECODE>
<COVERAGETYPECODE>UW</COVERAGETYPECODE>
<SPECIALREQUEST></SPECIALREQUEST>
</CallDetails>
读取文件如下,
InputStream inputStream = null;
inputStream = new FileInputStream(path);
InputStreamReader reader = new InputStreamReader(inputStream,"UTF-8");
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller um = context.createUnmarshaller();
InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");
return um.unmarshal(is);
并获取对象如下:
THIRDPARTYSERVICEORDERNO = serviceOrderListDTO.getServiceOrderList().get(0).getThirdPartyServiceOrderNo();
CALLDESC = ServiceOrderListDTO.getServiceOrderList().get(0).getCallDetailsList().getCallDesc();
System.out.println("THIRDPARTYSERVICEORDERNO : "+THIRDPARTYSERVICEORDERNO);
System.out.println("CALLDESC: "+CALLDESC);
运行此代码后,我得到如下输出,
THIRDPARTYSERVICEORDERNO : AJ16110004904;
CALLDESC: ???;
最佳答案
我已经对你的代码进行了测试。 它产生的结果是正确的,这意味着在 Debug模式下内存中的值显示正确。 当将这些符号打印到控制台时,您将看到 ???因为控制台窗口默认情况下无法显示这些符号。 您必须确保:
- IDE 中项目的编码设置为 UTF-8
- 用于显示消息的字体与 UTF-8 兼容。 (看看http://unifoundry.com/unifont.html)
- 您应该使用 -Dfile.encoding=UFT-8 运行 jre
关于java - 使用 JAXB 解析器解析韩语字符串 작동불 时获取字符串 '???',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281783/