2012-08-06 15 views
0

字符集問題,我有一個上傳zip的功能。在我的項目ZipEntry.getName()

當用戶上傳任何壓縮,我的系統中提取文件並顯示文件夾結構,用戶。

如果zip文件包含的文件具有類似名稱Õ.txt那麼它將璧顯示像O.txt。

ZipFile zipFile = new ZipFile(filePath, Charset.forName("UTF8")); 
Enumeration entries = zipFile.entries(); 
while(entries.hasMoreElements()) 
{ 

ZipEntry entry = (ZipEntry)entries.nextElement(); 
System.out.println(entry.getName()); 

} 

上面是我的代碼來讀取zip條目。

現在,當我試圖讓條目的名稱,它會給我O.txt代替Õ.txt的。

我已經用JDK 7測試了這段代碼,但結果相同。

我也曾嘗試不同的編碼類型等CP437,IBM437,ISO-8859-1和ISO-8859-1,但在結果沒有變化。

這樣的請求建議我可以在從zip文件中獲取條目的時間支持所有的字符

感謝&問候 雅鼎

+0

雅鼎,我估計java的正確讀取該文件的名稱,但如果你看到輸出的控制檯不支持Unicode字符。如果您調試代碼,您是否看到正確的名稱? – Augusto 2012-08-06 12:12:45

+0

嗨 是的,我通過調試器也看到了這件事。 感謝和問候 montu v boda – 2012-08-06 14:17:54

+0

您是否嘗試過使用Cp1252編碼?它適用於ApacheCommons-compress庫,它使用JDK6 http://stackoverflow.com/a/20523390/185565 – Whome 2013-12-11 15:41:25

回答

0

的方式似乎有可能是壞了你的環境和不一定是您訪問ZIP文件的方式。這裏有一個檢查清單:

  • ZIP文件是否真的包含一個帶有該名稱的UTF-8編碼條目?使用7-Zip等工具進行驗證。
  • JVM使用正確的字符集嗎?檢查系統屬性file.encoding。
  • 輸出終端/窗口的編碼是否與此設置相匹配?

畢竟,如果處理鏈的所有元素都使用正確的設置,結果將是正確的。

+0

我的問題是我如何知道zip文件的編碼? 如果使用7zip的創建壓縮文件並上傳的文件在我的系統然後正常工作...... 你可以建議我什麼我有如果zip文件通過任何工具進行的呢? 感謝和問候 – 2012-08-06 14:17:03

+0

ZIP文件只有兩種有效的編碼:CP437(按慣例標準)和UTF-8(按規範標準)。使用什麼取決於創建ZIP文件的工具 - 並非所有工具都正確。 7-zip應該可以正常工作。在JSE 7之前,Java做錯了(總是使用UTF-8,但沒有在文件中設置適當的位標誌)。有關詳細信息,請參閱http://www.pkware.com/documents/casestudies/APPNOTE.TXT上的ZIP文件格式規範附錄D. – 2012-08-06 17:59:52