返回

Python 快捷方式保存失败?如何处理目标路径中的非 ASCII 字符

windows

解决 Python 快捷方式保存失败:处理目标路径中的非 ASCII 字符

问题

在 Python 中使用 CreateShortcut 函数创建快捷方式时,如果目标路径包含非 ASCII 字符,则保存快捷方式可能会失败。此问题在禁用“Beta: Use Unicode UTF-8 for worldwide language support”选项时发生。

解决方案

为了解决此问题,我们需要对代码进行一些修改。具体来说,我们需要:

  1. 使用 unicode 类型存储路径: 目标路径应存储为 unicode 类型,而不是 str 类型。
  2. 获取文件系统编码: 使用 sys.getfilesystemencoding() 获取文件系统编码,以便将 unicode 路径转换为字节字符串。
  3. 解码字节字符串: 在保存快捷方式之前,将字节字符串解码为 unicode

修改后的代码

import sys
import pythoncom

def CreateShortcut(shortcutDir, shortcutName, targetPath, iconPath, iconIdx):
    pythoncom.CoInitialize()
    shll = Dispatch('WScript.Shell')
    shortcut = shll.CreateShortCut(shortcutDir.GetChild("%s.lnk" % shortcutName).path)
    shortcut.Targetpath = targetPath.path.encode(sys.getfilesystemencoding()).decode('utf-8')
    shortcut.IconLocation = GetFileShortPath(iconPath.path)
    shortcut.save() 

注意

  • 确保 targetPathunicode 类型。
  • 在禁用“Beta: Use Unicode UTF-8 for worldwide language support”选项时,此修改后的代码将正确处理包含非 ASCII 字符的目标路径。

常见问题解答

1. 为什么出现这个问题?

该问题是由于 Windows 在处理非 ASCII 字符时存在限制造成的。禁用“Beta: Use Unicode UTF-8 for worldwide language support”选项时,Python 中的 unicode 路径无法正确转换为 Windows 理解的字节字符串。

2. 除了修改代码之外,还有其他解决方案吗?

一种可能的解决方案是启用“Beta: Use Unicode UTF-8 for worldwide language support”选项。但是,此选项可能会影响其他应用程序的兼容性。

3. 这个解决方案适用于所有版本的 Python 吗?

是,此解决方案适用于所有版本的 Python。

4. 除了在 Python 中,此问题还会在其他语言中出现吗?

是的,在其他语言中也可能出现此问题,因为它们在处理非 ASCII 字符时可能会遇到类似的限制。

5. 如何避免此问题?

一种避免此问题的最佳做法是使用 UTF-8 编码始终存储路径。这样可以确保路径在所有平台和应用程序上得到正确解释。