Unicode在Windows上运行,但不适用于Red Hat Linux:Java

时间:2015-03-16 14:35:18

标签: java linux unicode jboss

在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时,它无法正确显示。

1 个答案:

答案 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));