看板 Python 關於我們 聯絡資訊
講的是Windows系統 想排除不可列印字元、16進制 但中文、日文、全形、合法符號都能保留 違法字這邊無法貼 因為ptt也貼不上來... 補個違法字樣本: http://i.imgur.com/c9SvoRY.jpg 最後面那串箭頭符號 網頁顯示 有試過了一些方法 sys.getfilesystemencoding() # 系統預設編碼 str.maketrans('', '', '\/*?:"<>|') # 排除微軟預設不合法字元 # 只接受ASCII可顯示字 valid_chars = "-_.() %s%s" % (string.printable, string.ascii_letters) filename = ''.join(c for c in targetString if c in valid_chars) 其他16進制排除的方法也試過 沒效 估計該違法字其實不是16進制字元 沒梗了 能推薦好用的方法嗎? 語言版本: python 3以上 --------------------------------------------------------------- 經過一番search 目前大概用了個替代解法如下 簡單說明下 因為python做系統編碼時 大概會把escape等unprintable字轉換成16進制 ex: 手邊實際遇到到的有 \x1b \x08 估計長度是4 所以先用repr 把違法字轉成可識別的hex str 接著迴圈撈char 針對\、x去排除4碼 大概上初步就完成了 (縮排請自行處理) def format_filename(_titleName): _titleName = repr(_titleName) findSlash = False findX = False tmpCount = 0 totalName = '' for i, tmpChr in enumerate(_titleName): if tmpChr == '\\': findSlash = True continue if findSlash == True: if tmpChr == 'x': findX = True continue if tmpCount >= 2: findSlash = False findX = False tmpCount = 0 if findSlash is True and findX is True: tmpCount = tmpCount + 1 continue totalName = totalName + tmpChr return totalName -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.215.208 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1495514710.A.E39.html ※ 編輯: pkmu8426 (114.46.215.208), 05/23/2017 12:52:36
Neisseria: 說實在的,Win 終端機的語系實在不好搞 05/23 15:10
Neisseria: 後來都用英文 Win 10,路徑只用英文 05/23 15:11
Neisseria: 英文版 Win 10 也可以輸入中文,上網抓一下輸入法即可 05/23 15:12
eight0: 我是這樣做 https://goo.gl/ifoo1n 05/23 18:22
還沒試 不過看來經過string.printable 中文、日文 漢字就不行了 ※ 編輯: pkmu8426 (114.46.223.227), 05/27/2017 12:15:27