2013-12-12 58 views
0

我的CSV導出出現問題。unix上的utf-8問題

我創建了一個頭文件是這樣的:

/** 
* @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。

+3

您可以將代碼輸出到csv文件嗎? – Nishan

+1

我們需要實際編寫文件的代碼。標題中沒有問題,只是在列表中處理字符串。 – YMomb

+0

究竟是什麼軟件顯示é而不是é?該軟件可能不會將您的文件解釋爲UTF-8。 –

回答

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 
+0

當我嘗試你的代碼我有兩個文件:N°BDT ouTournée – Mercer

+0

在這種情況下,我猜你在該環境中的默認編碼是UTF-8 – sudocode

-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的反饋表明,事實並非如此,儘管它可能仍然會發生。)

+1

-1不,這不是問題。 é是U + 00E9的UTF-8表示的Latin-1解釋。換句話說,輸出是正確的,但他正在用錯誤的工具或錯誤的設置來檢查它。 – tripleee

+0

@tripleee我拿-1,雖然我提到的問題可能仍然表現出來(也許有不同的垃圾字符)。你根本沒有任何保證,確實會在Unicode中代表U + 00e9。我會相應地更新這篇文章。 – Ingo