2016-12-25 60 views
0

我有幾個文件是通過在macOS下使用gnu tar解壓某些tar歸檔文件而獲得的。由於使用西裏爾字母,這些文件的名稱如%8A%AE%AD%E1⠭⨭ - %84%87 %FCML1.ipynb。看起來%8A等是cp866代碼,但也有一些unicode字符(如)顯示爲某些字節序列的unicode表示,意味着這些字節序列意外是有效的utf-8代碼。我想解碼所有的unicode/UTF-8能夠重命名我的文件。我該怎麼做?在tar解除解碼之後用西里爾文字母解碼cp866編碼的文件名

回答

0

這段Python功能可以幫助:

def decode_escaped_cp866(s): 
    out = [] 
    for token in re.finditer(r"%([0-9A-F]{2})|(.)", s): 
     if token.group(1) is not None: 
      out.append(bytes([int(token.group(1), 16)])) 
     elif token.group(2) is not None: 
      out.append(token.group(2).encode('utf-8')) 
    return b"".join(out).decode('cp866') 

print(decode_escaped_cp866("%8A%AE%AD%E1⠭⨭ - %84%87 %FCML1.ipynb")) 
# Константин - ДЗ №ML1.ipynb