Java字符编码写入文本文件
我的问题如下:Java字符编码写入文本文件,java,linux,encoding,utf-8,filewriter,Java,Linux,Encoding,Utf 8,Filewriter,我的问题如下: public OfferFileBuilder(String clientAppName, boolean isAppend) throws IOException, URISyntaxException { String exportFileLocation = getExportedFileLocation(); File offerFile = new File(getDatedFileName(exportFileLocation+"/"+
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"));
}
写入文本文件时出现字符编码问题。问题是字符没有显示预期值。例如,我正在写“”(可能是一个制表符),“是文本文件中显示的内容
背景资料
此数据存储在MSQL数据库中。数据库排序规则为SQL\u Latin1\u General\u CP1\u CI\u 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-8
,echo$LANG
,其中打印en_US.UTF-8
,echo$LC\u CTYPE`不打印任何内容
以下是我迄今为止所做的尝试。
我尝试更改OutputStreamWriter使用的字符编码我尝试了UTF-8和CP1252。当切换编码时,一些字符是固定的,而其他字符则不正确地显示
我的问题是:
我的OutputStreamWriter应该使用哪种编码?
(奖金问题)我们应该如何避免此类问题的发生。我得到的经验法则是使用UTF-8
,你永远不会遇到问题,但我现在不是这样
在服务器上运行
file-bi
命令显示文件是用ascii
编码的,而不是utf8
。完全删除文件并重新运行进程为我解决了这个问题。使用UTF-8
类编码如何?它专用于文本输出流。echo$LC_CTYPE的输出是什么?
?使用记事本++时,请验证“编码”下拉菜单是否显示“无BOM的UTF-8”。(假设Linux版本与之类似,Windows上也应该如此)@andrewccoist我没有尝试过PrintWriter
,但它继承了我现在的Writer
using@Andreas当我运行echo$LC_CTYPE时,它实际上不打印任何内容。