我偶然發現了一些使用舊式C++(明顯是爲ANSI編碼編寫的)寫入ZIP/unZIP歸檔算法的引用。但是現在我想知道是否有支持Unicode文件名的更新版本?是否有支持Windows的Unicode文件名的ZIP/unZIP算法的C++實現?
PS。我需要使用非託管C++編寫它。
我偶然發現了一些使用舊式C++(明顯是爲ANSI編碼編寫的)寫入ZIP/unZIP歸檔算法的引用。但是現在我想知道是否有支持Unicode文件名的更新版本?是否有支持Windows的Unicode文件名的ZIP/unZIP算法的C++實現?
PS。我需要使用非託管C++編寫它。
zip文件名的標準是UTF-8,許多人明顯忽略了它。
http://datadriven.com.au/2008/12/zip-files-and-encoding-i-hate-you/
在C++中,UTF-8字符串將作爲char *檢索,然後需要將其轉換爲可顯示的編碼。例如UTF-16或當前系統區域設置。
上面vulcanraven發佈的鏈接有一個ZIP/UNZIP utils的更新版本,但我不知道這裏有什麼問題 - 當我壓縮文件的名稱有一個擴展字符,然後在Windows 7中將其解壓縮到字符變成別的東西(看起來像中文符號)。它是Windows 7中的錯誤還是來自上面鏈接的ZIP實現中的錯誤? – ahmd0 2012-07-31 04:07:32
看來,Windows 7的壓縮工具將在當前窗口區域設置中編碼文件名。例如,如果我在文件名中使用日文字符林(意思是森林)並用windows工具壓縮它,它將它保存在默認窗口區域設置中(在我的情況下是Shift-JIS)。 Shift-JIS:0x97 0xD1 UTF-8:0xE6 0x9E 0x97 UCS-2:0x6797 – TheSteve 2012-07-31 07:10:59
哇,這是跛腳。那麼是否有某種開源存檔算法可以做到這一點:文件壓縮,加密,密碼保護? – ahmd0 2012-07-31 18:25:24
什麼是「舊式C++?」 – 2012-07-30 04:10:23
使用char而不是TCHAR或wchar – ahmd0 2012-07-30 04:11:15
這不是C++的風格;這是一種字符串使用方式。其次,關於那件事沒有什麼特別的;今天仍然是標準。 TCHAR是Windows的唯一的東西。 – 2012-07-30 04:13:26