我有一个应用程序,该应用程序每小时听一次外部提要,并接收提要JSON(提要JSON),它是分块的传输编码流,提要的监听器将块写到文件中,在整个流完成之后,另一个线程解析文件并提取数据。但是现在在写入文件时,即使我在写入时指定了字符集,数据也会以二进制格式写入。

    public void writeToFile(InputStream in){
     File feedFile = new File("/tmp/feed.json");
    try {
        FileUtils.touch(feedFile);
        StringWriter writer = new StringWriter();
        IOUtils.copy(in, writer, StandardCharsets.UTF_8);
        FileUtils.write(feedFile, writer.toString(), StandardCharsets.UTF_8,true);

    } catch (IOException e) {
        logger.error(Constants.FAILED_TO_WRITE_FEED_INTO_FILE,e);
    }
}

这段代码在Windows和Linux机器上运行良好,但是在docker容器中时,它以二进制格式编写。

Docker容器使用Centos7

最佳答案

容器中的语言环境UTF-8可能不存在?

您可以使用cat /etc/locale.conf在运行的容器中查看当前语言环境

如果不是LANG=en_US.utf8,则可以按照this StackOverflow post by user2915097的说明进行操作:



编辑1:

您应使用InputStreamReader而不是InputStream,因为:

  • InputStream用于处理二进制数据
  • InputStreamReader用于处理文本

  • 您可以找到更多信息here

    10-08 02:56