Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 特殊字符的问题_Java - Fatal编程技术网

Java 特殊字符的问题

Java 特殊字符的问题,java,Java,我被这个特殊角色的典型问题所困扰 我们在生产tomcat服务器(安装在Linux上)中运行了一个mbean,它接收xml提要并发送以供进一步处理。当mbean必须处理被“??”标记替换的特殊字符时,问题就会出现本地dev和QA服务器中也有相同的代码,运行良好尽管操作系统版本和tomcat版本都是相同的。读取xml提要并发送到JMS Q的代码部分粘贴如下: StringBuffer article = new StringBuffer(); InputStreamReader is = new

我被这个特殊角色的典型问题所困扰

我们在生产tomcat服务器(安装在Linux上)中运行了一个mbean,它接收xml提要并发送以供进一步处理。当mbean必须处理被“??”标记替换的特殊字符时,问题就会出现本地dev和QA服务器中也有相同的代码,运行良好尽管操作系统版本和tomcat版本都是相同的。读取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队列。日志文件将特殊字符显示为??'只有在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的server.xml中utf-8的URI编码
  • 已验证linux上的LANG环境变量为en_US.UTF-8
  • 已验证xml文件的默认编码为UTF8,没有BOM表

  • 我们无法确定原因是Tomcat服务器还是Linux操作系统。请帮助。

    不要将文章字符串作为文本记录。将每个字符转储为十六进制整数。这样,您就可以判断是日志记录失败,还是读取失败


    我不清楚JMS队列的行为是什么-只是日志记录失败了,还是JMS也失败了?

    当您通过Log4j(例如使用FileAppender)进行日志记录时,您可以设置日志文件的编码:

    <appender name="SOME_LOG" class="org.apache.log4j.RollingFileAppender">
    <param name="Encoding" value="UTF-8" />
    
    
    
    此外,必须安装适当的字符集以正确显示字符