Java 特殊字符的问题
我被这个特殊角色的典型问题所困扰 我们在生产tomcat服务器(安装在Linux上)中运行了一个mbean,它接收xml提要并发送以供进一步处理。当mbean必须处理被“??”标记替换的特殊字符时,问题就会出现本地dev和QA服务器中也有相同的代码,运行良好尽管操作系统版本和tomcat版本都是相同的。读取xml提要并发送到JMS Q的代码部分粘贴如下:Java 特殊字符的问题,java,Java,我被这个特殊角色的典型问题所困扰 我们在生产tomcat服务器(安装在Linux上)中运行了一个mbean,它接收xml提要并发送以供进一步处理。当mbean必须处理被“??”标记替换的特殊字符时,问题就会出现本地dev和QA服务器中也有相同的代码,运行良好尽管操作系统版本和tomcat版本都是相同的。读取xml提要并发送到JMS Q的代码部分粘贴如下: StringBuffer article = new StringBuffer(); InputStreamReader is = new
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队列。日志文件将特殊字符显示为??'只有在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>*
Hotellyöpymiset:hinta ja palvelu vastaavat toisiaan女士(大埃维特)-Asiakasthytytyväisyyden huippukaupungit
*
我们尝试了所有可能的方法,包括:
我们无法确定原因是Tomcat服务器还是Linux操作系统。请帮助。不要将文章字符串作为文本记录。将每个字符转储为十六进制整数。这样,您就可以判断是日志记录失败,还是读取失败
我不清楚JMS队列的行为是什么-只是日志记录失败了,还是JMS也失败了?当您通过Log4j(例如使用FileAppender)进行日志记录时,您可以设置日志文件的编码:
<appender name="SOME_LOG" class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" value="UTF-8" />
此外,必须安装适当的字符集以正确显示字符