Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.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程序让Excel用utf8打开csv文件?_Java_Excel_Csv_Encoding_Utf 8 - Fatal编程技术网

有没有办法通过java程序让Excel用utf8打开csv文件?

有没有办法通过java程序让Excel用utf8打开csv文件?,java,excel,csv,encoding,utf-8,Java,Excel,Csv,Encoding,Utf 8,我使用javacode将数据写入.csv文件,然后读取.csv文件并写入DB。我有中文数据,excel不能正确识别,得到垃圾值。有没有办法让excel用utf8打开csv文件,让javacode读取utf8字符并将其写入Db public class T { CSVWriter out = null; private void write(String[] values) throws IOException { out.writeNext(values); } public st

我使用javacode将数据写入.csv文件,然后读取.csv文件并写入DB。我有中文数据,excel不能正确识别,得到垃圾值。有没有办法让excel用utf8打开csv文件,让javacode读取utf8字符并将其写入Db

public class T {

CSVWriter out = null;

private void write(String[] values) throws IOException {
    out.writeNext(values);
}

public static void main(String[] args) throws IOException {

    File f  = new File("s.csv");

    FileOutputStream os = new FileOutputStream(f, false);

    CSVWriter out = new CSVWriter(
        new BufferedWriter(
            new OutputStreamWriter(
                os, "UTF-8")));
}
}

您正在使用的编码不支持中文字母,但是请将UTF-8更改为UTF-16,这将适合您的解决方案,因为它支持中文字母

如果您希望在将来的更新中支持emojis等,请使用UTF-32


希望这能最好地解决您的问题

默认情况下,Excel尝试使用用户的区域设置来确定打开CSV时要使用的8位Windows字符集

通过在文件顶部添加UTF-8 BOM,Excel(Windows和Mac>2013)将以UTF-8模式打开文件

public static void main(String[] args) throws IOException {

    File f  = new File("s.csv");

    FileOutputStream os = new FileOutputStream(f, false);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                                            os, "UTF-8"));
    bw.write('\ufeff');

    CSVWriter out = new CSVWriter(bw);

    //English, Euro sign, German, Greek
    String[] row = {"hello there","€", "Würzburg", "Αριστοτέλης Τέλλυ Σαβάλας"};

    out.writeNext(row);

    out.close();
}

尝试包含BOM表。这没有帮助。原因是用于编码每个字符的位数-越多位数,编码格式可以表示的字符就越多。UTF分别支持8位、16位和32位。我对几乎25个langaages使用相同的代码,因为utf8支持我使用的几乎所有languages。utf-16支持西班牙语和日语吗?好吧,把它看作集合论。UTF-32支持UTF-32(显然),UTF-16和UTF-8,UTF-16支持:UTF-16和UTF-8但不支持UTF-32,UTF8只支持UTF-8而不支持UTF-16和UTF-32。因此,如果您将编码更改为UTF-16或32,那么除了能够支持更多语言(如中文、日文、西班牙文等)之外,没有什么区别(可以这么说),但这里的问题是excel限制以utf8打开csv文件。它不是使用utf8打开的,而是采用系统默认编码。我在linux上尝试了相同的代码,它可以工作,因为在linux中默认的编码是utf8@Dan. 您对Unicode编码的理解是错误的-UTF-8支持所有Unicode编码,包括表情符号。UTF-16和UTF-32也是如此。UTF-8是可变长度编码。UTF-16每个字符使用16位或32位。