使用Python在Windows上使用非英语字符获取短路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python在Windows上使用非英语字符获取短路径相关的知识,希望对你有一定的参考价值。
在Windows中,我尝试获得包含非英语字符的路径的短路径(8.3 dos样式)。以下代码(来自here)在_GetShortPathNameW()函数中返回错误(错误是:“找不到文件”)。
# -*- coding: utf-8 -*-
import ctypes
from ctypes import wintypes
_GetShortPathNameW = ctypes.windll.kernel32.GetShortPathNameW
_GetShortPathNameW.argtypes = [wintypes.LPCWSTR, wintypes.LPWSTR, wintypes.DWORD]
_GetShortPathNameW.restype = wintypes.DWORD
def get_short_path_name(long_name):
"""
Gets the short path name of a given long path.
http://stackoverflow.com/a/23598461/200291
"""
output_buf_size = 0
while True:
output_buf = ctypes.create_unicode_buffer(output_buf_size)
needed = _GetShortPathNameW(long_name, output_buf, output_buf_size)
if output_buf_size >= needed:
return output_buf.value
else:
output_buf_size = needed
print get_short_path_name(u"C:\Users\zvi\Desktop\אאאאא")
任何的想法?
答案
由于Python 2.x没有使用str
的抽象Unicode表示,这可能会从Python 2.x字符串错误地转换为Windows宽字符串。
相反,Python 2.x具有与qazxsw poi分开的qazxsw poi数据类型,并且您指定的普通字符串文字默认情况下不是unicode。
最好使用Python 3.x,但如果失败,使用显式的unicode字符串可能会起作用:
unicode
(注意字符串前面的str
前缀)
以上是关于使用Python在Windows上使用非英语字符获取短路径的主要内容,如果未能解决你的问题,请参考以下文章