unix上utf-8的问题

时间:2013-12-12 11:21:12

标签: java csv utf-8 character-encoding

我的CSV导出存在问题。

我创建了一个这样的头文件:

/**
 * @param builder
 */
private void createEntete(StringBuilder builder) {
    List<String> entetes = new ArrayList<String>();
    entetes.add("Date Sélectionnée");
    entetes.add("Nom / Prénom des Agents");
    entetes.add("Entité des Agents");
    entetes.add("Créneaux Mains d'Oeuvre ou de la Tournée");
    entetes.add("N° BDT ou Tournée");
    entetes.add("Rubrique du BDT");
    entetes.add("Type du BDT");
    entetes.add("Objet du BDT ou Intitulé de la Disponibilité RH");
    entetes.add("Compte-rendu du BDT");
    entetes.add("Commune");
    entetes.add("Durée du BDT, Tournée ou de l'Activité");
    entetes.add("Durée du Dépassement");
    entetes.add("Motif du Dépassement");

    for (String valeur : entetes) {
        ajoutDonnee(valeur, builder);
    }

}

我使用的是UTF-8。

我的导出时,特殊字符的编码很差。 我有Ã而不是é

THX。

2 个答案:

答案 0 :(得分:2)

您尚未显示导出/写入数据的代码。

在该代码中,您可以设置合适的编码,例如UTF-8(尽管您的示例文本适用于CP1252)。

请注意,无论您阅读什么输出数据还必须设置为使用相同的编码。

因此,您的数据实际上可能写得很好,但在阅读时看起来不对。

例如,尝试执行此代码:

public static void main(String[] args) throws IOException {
    Writer writer = new OutputStreamWriter(new FileOutputStream("out_default.txt"));
    writer.write("N° BDT ou Tournée");
    writer.close();

    writer = new OutputStreamWriter(new FileOutputStream("out_utf8.txt"), "UTF-8");
    writer.write("N° BDT ou Tournée");
    writer.close();
}

现在尝试在打开文件时打开带有和不带匹配编码集的输出文件。

我的Eclipse默认为CP1252编码。

如果我打开out_default.txt文件,我会看到:

N° BDT ou Tournée

如果我打开out_utf8.txt文件,我会看到:

N° BDT ou Tournée

但是如果我将编辑器的编码设置为UTF8,那么在out_utf8.txt中我会看到:

N° BDT ou Tournée

答案 1 :(得分:-1)

请注意,在Unicode中,像é这样的重音字符有两种可能的表示形式:

U+00E9 lower case latin letter E with acute
U+0065 U+0301 lower case latin letter E, non spacing diacritical mark acute

请注意,您的IDE或您使用的任何编辑器可能会选择第二个表示形式,这将导致另一个UTF-8表示形式。 (@tripleee的反馈表明事实并非如此,尽管可能仍然会发生。)