在tar解除解码之后用西里尔文字母解码cp866编码的文件名
问题描述:
我有几个文件是通过在macOS下使用gnu tar
解压某些tar归档文件而获得的。由于使用西里尔字母,这些文件的名称如%8A%AE%AD%E1⠭⨭ - %84%87 %FCML1.ipynb
。看起来%8A
等是cp866代码,但也有一些unicode字符(如⨭
)显示为某些字节序列的unicode表示,意味着这些字节序列意外是有效的utf-8代码。我想解码所有的unicode/UTF-8能够重命名我的文件。我该怎么做?在tar解除解码之后用西里尔文字母解码cp866编码的文件名
答
这段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