在Java中,我正在生成具有Unicode字符的文件。
当我在Windows(Jboss)中运行程序并打开文件(CSV)时。它在excel中精确显示Unicode字符(Norwegin和Icelandic)。
但是当我在Red Hat Linux中的服务器中部署相同版本(在Jboss相同版本中)时,运行程序,生成文件并下载,当我在excel中看到它时,它会扭曲所有Unicode字符。
由于哪个Unicode会扭曲,您能否建议任何本地Linux设置?或者需要改变的地方?
FileWriter writer = new FileWriter(fileName);
writer.append(new String(data.toString().getBytes("UTF-8"),"UTF-8"));
writer.flush();
writer.close();
//data is StringBuilder type
我也尝试过ISO8859_1
更新1
我已经检查过系统编码:使用System.getProperty(" file.encoding")并发现
Windows是Cp1252,Linux是UTF-8
更新2
当我使用以下内容在Linux中打印时:
log.info(new String(data.toString().getBytes("UTF-8"), "UTF-8"));
它显示所有输出完全正常,但是当我将它放在FileWriter中,扩展名为filename.csv时,它无法正确显示。
答案 0 :(得分:0)
看起来你正在从字节翻译
data
to String
data.toString()
到字节
data.toString().getBytes("UTF-8")
to String
new String(data.toString().getBytes("UTF-8"),"UTF-8"))
到字节
writer.append(new String(data.toString().getBytes("UTF-8"),"UTF-8"));
尝试从输入编码到String的单个转换,然后写出String。因此data.toString()
需要知道它正在读取的编码。 data
是否支持来自不同代码页的转换?
writer.append(data.toString(codepage));