使用Java保存编码为UTF-8的CSV文件



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

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

CSV文件中的数据看起来像

ط´ط±ظٹط·

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

如使用FileWriter(Java(以UTF-8编写文件?应该使用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("u0627u0644u0627u0633u0645u0020u060cu0020u0627u0644u0633u0646u0020u060cu0020u0627u0644u0639u0646u0648u0627u0646");

在我的例子中,文件定义如下。

String file = fileName+"."+fileExtension;

变量fileName依赖于区域设置,即在阿拉伯语中,它包含";ير"并且用英语"表示;"出口";。变量fileExtension总是包含";csv";。

现在,问题是变量文件看起来像";csv;阿拉伯语和";export.csv";用英语

这是阿拉伯语文件的正确方式吗;تدير.csv"?

正如其他人所提到的:使用OutputStreamWriter。此外,您还可以将"\uFEFF"作为第一个字符。这将作为一个字节顺序标记,它可以帮助像excel这样的应用程序知道你使用了哪种编码。

最新更新