我有一个应用程序,每小时监听一次外部订阅源,并接收源JSON,这是一个分块传输编码流,feed的监听器将块写入文件,在整个流完成后,另一个线程解析该文件和提取数据.但是现在在写文件时,即使我在写入时指定了字符集,数据也是以二进制格式写入的.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在windows和linux box上工作正常,但是在docker容器里面以二进制格式编写.
Docker容器使用Centos7
也许容器中的语言环境 UTF-8 不存在?
您可以使用以下命令查看正在运行的容器中的当前区域设置cat /etc/locale.conf
如果不是,您可以按照user2915097 发布的 StackOverflow 帖子LANG=en_US.utf8中的说明进行操作:
Run Code Online (Sandbox Code Playgroud)# Set the locale RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ locale-gen ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8来源:如何在 Ubuntu Docker 容器内设置区域设置?/sf/answers/1988420521/
编辑1:
你应该使用InputStreamReader而不是InputStream因为:
InputStream用于处理二进制数据InputStreamReader是为了处理文本而设计的您可以在这里找到更多信息。
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |