【问题标题】:CSV Conversion Does not recognize special charactersCSV 转换不识别特殊字符
【发布时间】:2013-11-07 14:43:10
【问题描述】:

这就是问题所在。我有一个将XML 转换为CSV 的java 程序。我的 xml 中的元素标记之一如下所示。

<person-name>Greg kaménez</person-name>.

我的解析器能够正确解析它。但是在转换之后,当我将它写入 csv 文件并在 mcsft excel 中打开它时,我看到 "Greg kaménez" 作为单元格值而不是 Greg kaménez。

我还注意到,当我在 Eclipse IDE 的文本编辑器中打开同一个 csv 文件时,它会正确显示名称“Greg kaménez”。

这是我将字符串写入 csv 的 sn-p:

    String csv = ""x","y","Greg kaménez","z"";
    String fileName = "output.csv";
    File csvFile = new File(fileName);
    String jobId = null;
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"));
    writer.append(csv);
    writer.close();

【问题讨论】:

  • 我怀疑这是重音符号e 被编码为两个字符的问题,其中一个字符修改了第二个字符。因为这是特定于顺序的,所以当某些应用程序无序处理这些字符时,它会产生乱码而不是正确重音的字符。 (不过,我们需要查看代码才能准确排除正在发生的事情。)
  • 设置两个文件的编码为utf
  • 感谢您的回复我尝试将两个文件的编码设置为 UTF-8,但效果很好。我认为弗拉维奥是对的,但他的回答也帮不了我。我的程序在 Eclipse 中生成 csv 文件,当我查找该文件的属性时,我看到 UTF-8 编码已被设置为默认值

标签: java eclipse csv


【解决方案1】:

CSV 文件无法指定您使用哪种字符编码来编写它们,因此文本编辑器和 Excel 等程序在读取时必须尝试猜测编码,或者使用系统默认值。

如果文本编辑器能够正确显示字符,则可能您做对了一切,但 Excel 没有正确猜测字符编码。

当您在 Excel 中导入文件时,它会要求您指定原始编码。选择正确的值,您应该能够正确读取文件。

【讨论】:

  • 感谢您的回复。不幸的是,我想以编程方式而不是手动实现这一点。
【解决方案2】:

Excel 默认使用 Windows-1252。因此,如果您想在 Excel 中读取 CSV,请使用

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "Windows-1252"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2020-12-18
    • 2013-10-26
    • 2018-02-10
    • 2018-09-25
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多