* updated by Kii Ali, 12-11-2001 X-Sender: gwotrang@mail.ht.net.tw Date: Sun, 25 Apr 1999 18:12:40 +0800 To: Patch-author From: Gwo Trang Subject: 加強 WinRAR 對根目錄 '\' 字元的中文相容能力 ■ WinRAR -- 壓縮率比 WinZip 高,非常好用,應該是網路上必備的壓縮工具。 這個軟體本身不相容 '\' 根目錄字元,很多中文名稱的檔案都無法正常壓縮, 例如檔案名稱為「玉佩.txt」,用 WinRAR 壓縮就會跳出警告視窗或顯示錯誤 訊息,這個問題修正後,WinRAR 使用起來就比較得心應手了。 WinRAR v2.5 正式版 【加強 WinRAR 對根目錄 '\' 字元的中文相容能力】 1.讓 WinRAR 認識含有 '\' 字元的中文檔名 ======================================= 檔案 : WinRAR.exe a.搜尋 : 80 3F 00 74 15 33 D2 8A 57 01 52 E8 CF C8 FF FF 59 85 修改 : EB 18 3C 5C 75 09 80 7E FF A1 73 03 B0 01 C3 33 C0 C3 (修改程式片段,增加對 '\' 字元的判斷,共一組) b.搜尋 : D4 C8 FF FF 修改 : 13 00 00 00 (檢查檔案部份,將流程轉向新增判斷,共一組) a.33C0 XOR EAX,EAX 8A06 MOV AL,[ESI] 50 PUSH EAX E8D4C8FFFF CALL 0042018C ---> CALL 004238CB 59 POP ECX 85C0 TEST EAX,EAX 7406 JZ 004238C3 8D441F01 LEA EAX,[EBX+EDI+01] EB22 JMP 004238E5 4B DEC EBX 4E DEC ESI 85DB TEST EBX,EBX 7DE5 JGE 004238AE 803F00 CMP BYTE PTR [EDI],00 ----------------+ 7415 JZ 004238E3 以下可做為廢碼 | 33D2 XOR EDX,EDX | 8A5701 MOV DL,[EDI+01] v 52 PUSH EDX E8CFC8FFFF CALL 004201A8 59 POP ECX 將廢碼修改為新增判斷。 EB18 JMP 004238E3 ---> 將流程接續下去,留下後面的空間寫判斷式。 3C5C CMP AL,5C 7509 JNZ 004238D8 807EFFA1 CMP BYTE PTR [ESI-01],A1 7303 JAE 004238D8 B001 MOV AL,01 C3 RET 33C0 XOR EAX,EAX C3 RET 2.讓 WinRAR 可以正確的顯示含有 '\' 字元的中文檔名 ================================================= 檔案 : WinRAR.exe a.搜尋 : 8B D7 B9 FF FF FF FF 32 C0 FC F2 AE F7 D1 8B FA 8A 45 0C F2 AE 75 06 8D 47 FF 5F 5D C3 33 C0 修改 : 8A 65 0C 8A 07 3C 00 74 12 3A C4 74 03 47 EB F3 80 7F FF A1 73 F7 8B C7 5F 5D C3 33 C0 EB F9 (修改程式片段,增加對 '\' 字元的判斷,共一組) b.搜尋 : F9 5C 75 0F (修正目錄顯示,共一組) 修改 : -- -- EB -- a.55 PUSH EBP 8BEC MOV EBP,ESP 57 PUSH EDI 8B7D08 MOV EDI,[EBP+08] 8BD7 MOV EDX,EDI ------> MOV AH,[EBP+0C] B9FFFFFFFF MOV ECX,FFFFFFFF MOV AL,[EDI] 32C0 XOR AL,AL CMP AL,00 FC CLD JZ 004448FE F2AE REPNZ SCASB CMP AL,AH F7D1 NOT ECX JZ 004448F3 8BFA MOV EDI,EDX INC EDI 8A450C MOV AL,[EBP+0C] JMP 004448E6 F2AE REPNZ SCASB CMP BYTE PTR [EDI-01],A1 7506 JNZ 00444900 JAE 004448F0 8D47FF LEA EAX,[EDI-01] MOV EAX,EDI 5F POP EDI POP EDI 5D POP EBP POP EBP C3 RET RET 33C0 XOR EAX,EAX XOR EAX,EAX EBF9 JMP 004448FD JMP 004448FB b.8A8C0563FDFFFF MOV CL,[EAX+EBP-029D] ---> 取得目錄最後一個 byte,並檢查字元是否為 '\' 83F95C CMP ECX,5C 750F JNZ 0041AE40 3.讓 WinRAR 可以開啟含有 '\' 字元的中文壓縮檔名 =============================================== 檔案 : WinRAR.exe 搜尋 : 74 0A 83 FA 2F 74 05 83 FA 3A 75 03 修改 : 75 0D 80 78 FF A1 73 07 90 90 90 90 (修改程式片段,增加對 '\' 字元的判斷,共一組) 55 PUSH EBP 8BEC MOV EBP,ESP 8B4508 MOV EAX,[EBP+08] 8BC8 MOV ECX,EAX EB17 JMP 00407421 33D2 XOR EDX,EDX 8A10 MOV DL,[EAX] 83FA5C CMP EDX,5C -------> CMP EDX,5C 740A JZ 0040741D JNZ 00407420 83FA2F CMP EDX,2F CMP BYTE PTR [EAX-01],A1 7405 JZ 0040741D JAE 00407420 83FA3A CMP EDX,3A NOP 7503 JNZ 00407420 NOP 8D4801 LEA ECX,[EAX+01] NOP 40 INC EAX NOP 803800 CMP BYTE PTR [EAX],00 75E4 JNZ 0040740A 8BC1 MOV EAX,ECX 5D POP EBP C3 RET 4.讓 WinRAR 可以建立含有 '\' 字元的中文壓縮檔名 =============================================== 檔案 : WinRAR.exe 搜尋 : 74 24 8D 95 (共一組) 修改 : EB -- -- -- ■ FAQ (節錄一小段對話) ======================= >多年來不能使用的遺憾終於解決了! >我也測試了一會兒,發現中文檔名解壓縮的問題已經可以正常使用了! >還有一點小地方美中不足,跟您報告一下: > >以「娉.txt」為例, >1. 如果按滑鼠右鍵,快捷選單上的「加入成 .rar」,沒有正常出現檔名, > 但一壓縮,卻可以正常出現「娉.rar」。 >2. 如果選擇「加入成壓縮檔...」,則對話方塊上建議的檔名是「娉.rar」 > ,如果按確定,卻壓縮成「娉娉.rar」,多了一個字。(這多字的毛病 > 在 Eudora 的 attech file 好像也發生過喔?) 1、2 的問題我也很想改,但這算是 Windows 的 bug,我不方便改, 可能某些函式並不完全相容中文,或某些地方判斷錯誤,因為建立 檔案時,明明是 '成功.rar',但 Windows 建立檔名時卻會 Double 檔名,我也覺得很頭大,因為並不是軟體本身處理出錯,沒辦法啦, 放棄! 第 1 個問題,我可以修改成 '正常出現檔名',但是一壓縮後就會 出現像第 2 類的情況,所以,放棄! ha..ha.. 您的記性真好,Eudora 也會多字,啊,心痛。:Q >3. 如果把「娉.txt」藏在三層目錄娉\娉\娉下面,則可以壓縮,但從 > WinRAR 看來,卻不正常,解壓縮之後,檔案不見了,目錄變掉了。 啊,又再一次心痛。:) 因為我們加進去的判斷式不夠聰明,短短幾行程式碼是做不到這麼 詳細的判斷的,所以,只能盡量不要使用含有 '\' 字元的中文字當 做目錄名稱。 壓縮後檔案不見,那是因為 WinRAR 只有壓目錄名稱和路徑而已, 檔案並沒有壓起來。(可以用 UltraEdit 來看 .rar) 目錄變掉,那是因為我們補強進去的判斷式不夠聰明,只能應付 一般情況。