2015-10-14 52 views
0

我的问题如下:写入文本文件时Java的字符编码写入文本文件

有问题与字符编码。问题是字符没有显示预期的价值。例如我正在写''(这可能是一个Tab字符),''是文本文件中显示的内容。

背景信息

该数据被存储在一个数据库MSQL。数据库归类为SQL_Latin1_General_CP1_CI_AS,字段为varchar。我已经学习了排序规则,并确定了数据库端使用的字符编码类型。值存储正确,所以没有问题在这里。

我的Java应用程序运行查询从数据库中提取数据,这也看起来不错。我已经调试了代码,并在写入文件之前看到所有字符串都有正确的表示。

接下来我写使用OutputStreamWriter文本.txt文件如下:

public OfferFileBuilder(String clientAppName, boolean isAppend) throws IOException, URISyntaxException { 
     String exportFileLocation = getExportedFileLocation(); 
     File offerFile = new File(getDatedFileName(exportFileLocation+"/"+clientAppName+"_OFFERRECORDS")); 
     bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(offerFile, isAppend), "UTF-8")); 
    } 

现在,一旦我打开Linux服务器上的文件通过文件运行cat命令或使用打开文件记事本++某些字符不正确显示。

我已经在服务器上运行以下命令来看看它的编码locale charmap它打印UTF-8echo $LANG它打印en_US.UTF-8和echo $ LC_CTYPE`打印什么。

这是我到目前为止尝试过的。 我试图改变OutputStreamWriter使用的字符编码我试过UTF-8和CP1252。切换编码时,某些字符被固定,而其他字符则不正确显示。

我的问题是这样的: 我的OutputStreamWriter应该使用哪种编码? (奖金问题)我们应该如何避免这样的问题发生。我提供的经验法则是使用UTF-8,你永远不会遇到问题,但现在对我来说不是这种情况。

+0

如何在[PrintWriter](https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html)类中使用UTF-8编码?它专用于文本输出流。 – AndrewMcCoist

+0

'echo $ LC_CTYPE'的输出是什么? – Andreas

+0

使用Notepad ++时,确认“编码”下拉菜单中显示“没有BOM的UTF-8”。 *(这就是它应该在Windows上,假设Linux版本是相似的)* – Andreas

回答

0

在服务器上运行file -bi命令显示,该文件是用ascii代替utf8编码。完全删除文件并重新运行该过程为我解决了这个问题。