[Windows] 在日文 Windows 上建立 BIG5 編碼的檔名,檔名會亂掉

[Windows] 在日文 Windows 上建立 BIG5 編碼的檔名,檔名會亂掉

最近專案遇到一個很怪的問題…

Python 程式建立了一個 BIG5 編碼的檔案名稱,

平常如果是在英文版的 Windows 上跑沒什麼問題,可以拿到正確的檔名,

可是如果是在日文版的 Windows 上的話,就有機會出問題,

原本的 BIG5 檔名可能會亂掉…

 

舉例來說,我想要建立 “FTA對台新簽.pdf” 這個檔案,

這個檔名的 BIG5 編碼是 “FTA\xb9\xef\xa5x\xb7s\xc3\xb1.pdf”,

當我用 open() 建立檔案時沒什麼錯誤訊息,

但用 os.listdir() 去看一下剛剛建出來的檔案名稱,卻會發現檔名改變了,

從原本的 “FTA\xb9\xef\xa5x\xb7s\xc3\xb1.pdf” 變成 “FTA\xb9\x81Ex\xb7s\xc3\xb1.pdf”:

Screenshot from 2016-08-24 15-10-41    

 

這個問題在英文版的 Windows 並不會發生~老實說不曉得原因是什麼,

只能猜測是不是日文 Windows 會以當地的編碼 (如 Shift-JIS) 來解譯這個 MBCS (Multi-Byte Character Set) 字串,

而正好裡面有些不是 Shift-JIS 編碼合法的字元,因此被暗地裡換掉了~

 

關於 \xef\xa5 被換成 \x81E,測試了一下,

\x81E 是 Shift-JIS 中的 “・” 字元,在想說可能是因為 \xef\xa5 不是合法的 Shift-JIS,

所以就被換成了個點點點的符號:

>>> print "\x81E".decode("shift-jis")

 

真的想深究下去的話,應該是可以寫個 Windows 小程式,

看看 MultiByteToWideChar() 在日文環境下,給它一個 BIG5 字串,會轉出什麼東西~

不過有點懶得試了,有空再來玩吧~

 

(本頁面已被瀏覽過 273 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料