我很擔心這個特殊字符的典型問題。特殊字符問題
我們有一個運行在生產tomcat服務器(安裝在Linux上)的mbean,它接收xml提要併發送進一步處理。當mbean必須處理由'??'取代的特殊字符時,問題就會出現。分數。 雖然操作系統版本,tomcat版本都是一樣的,但本地開發和QA服務器可以使用相同的代碼,其工作正常。的代碼讀取XML飼料和發送給JMS Q上的部分被粘貼在下面:
StringBuffer article = new StringBuffer();
InputStreamReader is = new InputStreamReader(new FileInputStream(pendingFile), "utf-8");
int data;
while ((data = is.read()) != -1) {
article.append((char)data);
}
is.close();
is = null;
log.debug("Read in \n" + article.toString());
try {
js.writeTextMessage(article.toString(), "server", hostName, processor);
} catch (JMSException je) {
log.error("jms exception: " + je.getMessage());
// server probably shutdown
this.stop();
return;
}
以上代碼從「待處理檔案」讀取文件,其附加到StringBuffer的,所述文件讀取到一個日誌和發佈到JMS隊列。日誌文件顯示特殊charas爲? '只有在PROD' 有特殊字符的XML資訊是如下:
<?xml version="1.0" encoding="UTF-8"?>
<hedline>
<hl1>
Hotelliyöpymiset: Missä hinta ja palvelu vastaavat toisiaan (tai eivät) - asiakastyytyväisyyden huippukaupungit
</hl1>
</hedline>*
我們嘗試了所有其中包括possibilites:
- URI編碼爲UTF-8 server.xml中爲Tomcat。
- 在linux上驗證了LANG環境變量是en_US.UTF-8。
- 驗證了xml文件的默認編碼爲UTF8,沒有BOM。
我們無法找到原因是否與Tomcat服務器或Linux操作系統有關。請幫忙。