我正试图用java创建一个CSV文件,其中包含一些阿拉伯字母的数据,但当我打开文件时,我发现阿拉伯字母显示为符号。这是我的代码:
String csvFilePath = "test.csv";
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(csvFilePath));
fileWriter.write("الاسم ، السن ، العنوان");
CSV文件中的数据看起来像
ط´ط±ظٹط·
那么我该如何解决这个问题呢?
如使用FileWriter(Java(以UTF-8编写文件?应该使用OutputStreamWriter
和FileOutputStream
而不是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这样的应用程序知道你使用了哪种编码。