java - 特殊字符的问题

标签 java

我对这个特殊字符的典型问题感到困扰。

我们有一个在生产 tomcat 服务器(安装在 Linux 上)中运行的 mbean,它获取 xml 提要并发送以进行进一步处理。当 mbean 必须处理被“??”替换的特殊字符时,问题就会出现。分数。 本地开发和 QA 服务器中提供了相同的代码,运行良好尽管操作系统版本、tomcat 版本都相同。读取 xml feed 并发送到 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 队列。日志文件将特殊字符显示为 ?? 'Only in Prod' 带有特殊字符的 Xml feed 如下:

<?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>* 

我们尝试了所有的可能性,包括:

  1. 在 Tomcat 的 server.xml 中将 URI 编码为 utf-8。
  2. 已验证 Linux 上的 LANG 环境变量为 en_US.UTF-8。
  3. 已验证 xml 文件的默认编码为无 BOM 的 UTF8。

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

最佳答案

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

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

关于java - 特殊字符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3290880/

相关文章:

Java:使用 TCP 套接字的简单 http GET 请求

java - 如何使用 ReSTLet 将所有路径路由到单个 ServerResource

java - Java (Android) 中的 List<?> 是什么?

java - 媒体播放器搜索栏搜索无法正常工作

Java 算法 : pair list entries by multiple case criteria

java - Apache POI - 负颜色值

java - Junit和Ant集成的另一个简单问题

java - 在使用 RMI 的分布式系统上使用 Apache Shiro 的正确方法?

java - 无法与远程机器上的 MySQL 数据库建立连接

java - 如何获取用于编写自定义 Lombok 转换的 org.mangosdk.spi.ProviderFor 依赖项?