2016-12-25 3 views
0

macOSの下でgnu tarを使用していくつかのtarアーカイブをアンアーカイブして得たファイルがいくつかあります。これらのファイルの名前は、キリル文字を使用しているため、%8A%AE%AD%E1⠭⨭ - %84%87 %FCML1.ipynbです。 %8Aなどがcp866コードであると思われますが、誤って有効な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 
関連する問題