Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用UTF-8写入文件_Java_Android_File_Utf 8 - Fatal编程技术网

Java 使用UTF-8写入文件

Java 使用UTF-8写入文件,java,android,file,utf-8,Java,Android,File,Utf 8,我正在尝试用utf-8编码编写一个文件。 我想在电脑上用Excel查看此文件 我已经看过足够多的实现此代码的示例。但我没有达到预期的效果。 我的代码: String baseDir=android.os.Environment.getExternalStorageDirectory().getAbsolutePath(); 字符串文件名=etName.getText().toString()+“.csv”; 字符串filePath=baseDir+File.separator+fileName;

我正在尝试用utf-8编码编写一个文件。 我想在电脑上用Excel查看此文件 我已经看过足够多的实现此代码的示例。但我没有达到预期的效果。 我的代码:

String baseDir=android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
字符串文件名=etName.getText().toString()+“.csv”;
字符串filePath=baseDir+File.separator+fileName;
文件sdCardFile=新文件(文件路径);
字符串日期=“2017年4月1日-2017年4月30日”;
字符串NEW_LINE=“\n”;
字符串NEW_CELL=“;”;
字符串标题=“МССС”+
"Фамилия ИО;" +
"Цикл ТО-1;" +
"Культурное состояние л-ва;" +
"Посещение тех.занятий;" +
"Расшифровка лент;" +
"Охрана труда;" +
"Отказы";
BufferedWriter BufferedWriter=新的BufferedWriter
(新的OutputStreamWriter(新文件OutputStream(sdCardFile),“UTF-8”);
bufferedWriter.write(日期);
bufferedWriter.write(新的_行);
bufferedWriter.write(标头);
对于(int i=0;i
但我看到了


为什么?

我不确定这是否有帮助,但也许用这种方式将字符串格式化为UTF-8会有所帮助:

bufferedWriter.write(new String(machinists.get(i).getLastName().getBytes(), "UTF-8"));
标题也是如此

编辑:

您可以尝试的另一件事是为所有值添加
”,并将
作为分隔符(csv毕竟代表“逗号分隔值”):


我不确定这是否有帮助,但通过这种方式将字符串格式化为UTF-8可能会有所帮助:

bufferedWriter.write(new String(machinists.get(i).getLastName().getBytes(), "UTF-8"));
标题也是如此

编辑:

您可以尝试的另一件事是为所有值添加
”,并将
作为分隔符(csv毕竟代表“逗号分隔值”):

我解决了这个问题

FileOutputStream os = new FileOutputStream(sdCardFile);
        os.write(0xef);<-!!!!!!!!
        os.write(0xbb);<-!!!!!!!!
        os.write(0xbf);<-!!!!!!!!
        CSVWriter writer = new CSVWriter(new OutputStreamWriter(os), ';');
writer.writeNext(HEADER);
...
writer.writeNext('something data');
writer.close();
FileOutputStream os=新的FileOutputStream(sdCardFile);
os.write(0xef) 我解决了这个问题

FileOutputStream os = new FileOutputStream(sdCardFile);
        os.write(0xef);<-!!!!!!!!
        os.write(0xbb);<-!!!!!!!!
        os.write(0xbf);<-!!!!!!!!
        CSVWriter writer = new CSVWriter(new OutputStreamWriter(os), ';');
writer.writeNext(HEADER);
...
writer.writeNext('something data');
writer.close();
FileOutputStream os=新的FileOutputStream(sdCardFile);

os.write(0xef);我还尝试了以下代码:BufferedWriter BufferedWriter=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(sdCardFile),Charset.forName(“UTF-8”).newEncoder());您确定Excel将其解释为UTF-8文件,还是将其作为不同的字符编码进行读取?请勿使用文字“UTF-8”。使用
StandardCharsets.UTF_8
@Jesper No。我不确定。这是我第一次这么做。但是,如果您使用UTF-8编码将其重新保存在记事本中,Excel将按照我所希望的方式显示该文件。@Michael StandardCharsets.UTF_8需要API级别19。最小API级别为16(((我还尝试了以下代码:BufferedWriter BufferedWriter=new BufferedWriter(new OutputStreamWriter)(new FileOutputStream(sdCardFile),Charset.forName(“UTF-8”).newEncoder());您确定Excel将其解释为UTF-8文件,还是将其作为不同的字符编码进行读取?请勿使用文字“UTF-8”。使用
StandardCharsets.UTF\u 8
@Jesper No。我不确定。我是第一次这样做。但是如果你用UTF-8编码将它保存在记事本中,Excel会按照我想要的方式显示文件。@Michael StandardCharsets.UTF\u 8需要API级别19。最小API级别是16(((不。这对我没有帮助((bufferedWriter.write(\)“+machinists.get(i).getLastName()+”,”;bufferedWriter.write(“\”+新字符串(HEADER.getBytes(),“UTF-8”)+“\”,”);对我没有帮助(((可能问题在于如何打开文件?@Doron Yakovlev Golani双击。我没有安装Excel-我以数字(苹果版Excel)打开文件时看到西里尔字母)。无论如何,文本的格式不是CSV格式,因为您使用了错误的分隔符。如果我是您,我会先解决这个问题,然后确保正确导入文件(可能不是双击它,您应该尝试从内部手动导入-我在过去看到两种方法之间的行为发生了变化)。不。这对我没有帮助((bufferedWriter.write(“\”+机械师.get(i).getLastName()+“\”,”);bufferedWriter.write(“\”+新字符串(HEADER.getBytes(),“UTF-8”)+“\”,”);对我没有帮助(((可能问题是你如何打开文件?@Doron Yakovlev Golani)只要双击一下。我没有安装Excel-当我以数字打开文件时看到西里尔字母)(苹果版本的Excel)。无论如何,文本的格式不是CSV,因为您使用了错误的分隔符。如果我是您,我会先解决这个问题,然后确保正确导入文件(可能不是双击它,您应该尝试从内部手动导入-我在