保存CSV文件与编码UTF-8与Java

ht4b089n  于 11个月前  发布在  Java
关注(0)|答案(4)|浏览(141)

我试图用java创建一个CSV文件包含一些阿拉伯字母的数据,但当我打开文件时,我发现阿拉伯字母显示为符号。下面是我的代码:

String csvFilePath = "test.csv";
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(csvFilePath));
fileWriter.write("الاسم ، السن ، العنوان");

字符串
CSV文件中的数据如下所示

ط´ط±ظٹط·


那么我该如何解决这个问题呢?

izkcnapc

izkcnapc1#

Write a file in UTF-8 using FileWriter (Java)?中所述,您应该使用OutputStreamWriterFileOutputStream而不是FileWriter,并指定编码:

String csvFilePath = "test.csv";
FileOutputStream file = new FileOutputStream(csvFilePath);
OutputStreamWriter fileWriter = new OutputStreamWriter(file, StandardCharsets.UTF_8);
fileWriter.write("الاسم ، السن ، العنوان");
fileWriter.close();

字符串

评论后编辑:

要确保源代码的编码不是问题,请像这样转义您的unicode字符串:

fileWriter.write("\u0627\u0644\u0627\u0633\u0645\u0020\u060c\u0020\u0627\u0644\u0633\u0646\u0020\u060c\u0020\u0627\u0644\u0639\u0646\u0648\u0627\u0646");

bqucvtff

bqucvtff2#

在我的例子中,文件定义如下。
第一个月
变量fileName是区域设置相关的,即在阿拉伯语中它包含“CSV”,在英语中它包含“export”。变量fileExtension总是包含“csv”。
现在,问题是变量文件在阿拉伯语中看起来像“csv.txt”,而在英语中看起来像“export.csv”。
这是正确的方式为一个文件在阿拉伯语或它应该看起来像“阿拉伯语.csv”?

iklwldmw

iklwldmw3#

正如其他人所提到的:使用OutputStreamWriter。另外,你可以写“\uFEFF”作为第一个字符。这将作为一个字节顺序标记,它有助于像Excel这样的应用程序知道你使用的编码。

ktca8awb

ktca8awb4#

当Microsoft Excel以CSV UTF-8格式保存文件时,它会在文件的开头添加三个字节。下面是一个java函数来实现此目的:

public static void makeFileExcelUTF8(String filename) {
    try {
      Path path = Paths.get(filename);
      byte[] fileBytes = Files.readAllBytes(path);
      if (fileBytes[0] == (byte) 239 && fileBytes[1] == (byte) 187 && fileBytes[2] == (byte) 191) {
        System.out.println(filename + " is already in excel utf8 format");
        return;
      }
      byte[] prefixBytes = new byte[3];
      prefixBytes[0] = (byte) 239;
      prefixBytes[1] = (byte) 187;
      prefixBytes[2] = (byte) 191;
      Files.write(path, prefixBytes);
      Files.write(path, fileBytes, StandardOpenOption.APPEND);
    }
    catch (Exception e) {
      System.out.println("problem saving into excel utf8 format");
    }
  }

字符串

相关问题