【发布时间】:2013-05-09 19:11:23
【问题描述】:
当使用右键菜单上下文时,windows 将文件路径作为原始(字节)字符串类型传递。
例如:
path = 'C:\\MyDir\\\x99\x8c\x85\x8d.mp3'
我的应用程序中的许多外部包都需要unicode 类型的字符串,因此我必须将其转换为unicode。
如果我们事先知道原始字符串的编码(在示例中为cp1255),那将很容易。但是我不知道世界各地的每台计算机将在本地使用哪种编码。
如何将string 转换为unicode?也许需要使用win32api?
【问题讨论】:
-
ASCII 是一种始终可以转换为 Unicode 的编解码器;只是
.decode('ASCII')。你的意思不是 ASCII 而是编码字节。 -
您通常无法在不知道编码的情况下将字符串解码为 unicode。您的文本不是 ASCII 而是一些未知的编码。
-
您的示例是 not cp1255,使用该编解码器解码失败。它也不是 UTF-16,这是令人惊讶的,因为这是 Windows 内部用于文件名的。
-
import locale; path.decode(locale.getpreferredencoding())可能有用吗? -
根据您的断言判断,这是
cp1255(希伯来语),我尝试了其他一些编解码器;这实际上是cp856或cp862;两者都将您提供的字节解码为:C:\MyDir\שלום.mp3
标签: python windows unicode rawbytestring