解码使用 VB 创建的 Python 3.7.4 文件名



我在Windows 10目录中有一些文件,这些文件是用VB编写的加密逻辑命名的。 VB 逻辑最初是在带有 VB.net 的 Windows 7 上编写的,但正如预期的那样,两个版本的 Windows 之间的文件名完全相同。 我遇到的问题是,当我尝试在 Python 3.7.4 中逐字符循环中解密这些文件名时,从 ord(( 函数返回的内容与该字符的 VB asc(( 指定不匹配。

所有字母都匹配(最多为 ascii 字符 126(,但之后的所有字母都不匹配。

例如,在 VB 中:

?asc("ƒ")

返回 131。

但是,在 Python 3.4.7 中:

ord('ƒ') 

返回 402。

我在这里读了很多很棒的文章,讨论数据字符串(在文件中(和文件名的 UTF-8 与 cp1252 编码,但我还没有遇到解决我的问题的方法。

当我运行时:

sys.getdefaultencoding()

我得到"utf-8"。 我相信,这就是用于文件名和用于它们的函数,例如os.fsdecode((,os.listdir((等。

当我运行时:

locale.getpreferredencoding()

我得到'cp1252'。

我在"栅栏的另一边"注意到的一件事是,python ord (( DO 返回的值与 VB 等效的 AscW(( 匹配,但更改所有这些代码将比继续我们迄今为止在 Python 中所做的其他工作更成问题。

我应该更改区域设置的首选编码还是系统的默认编码来解决此问题?

谢谢!

请注意,Python 值是 Unicode 代码点(大于 255(。 如果你在Python中已经有正确的文件名,只需用适当的编码(显然是cp1252(对字符串进行编码,然后检查字节值。 (您还可以使用bytes参数调用os.listdir等函数,以首先抑制解码。

最新更新