Python3 在 Windows 读取路径时多了一个\u202a 是怎么回事?
如题,读取文件,读到一半,报错了,发现打印的文件路径+文件名中多了个'\u202ad',骑怪的很,怎么解决啊?重命名也行😱
文件在这里:
D:\bulkControl\20181129\009.jpg'
读取出来长这样,怎么回事😡
OSError: [Errno 22] Invalid argument: '\u202aD:\\bulkControl\\20181129\\009.jpg'
encode 也不管用
UnicodeEncodeError: 'gb2312' codec can't encode character '\u202a' in position 0: illegal multibyte sequence
Python3 在 Windows 读取路径时多了一个\u202a 是怎么回事?
11 回复
搜 u202a,你会有发现的。
这是Windows系统在复制文件路径时自动添加的Unicode控制字符(从左到右嵌入标记)。当你从资源管理器复制路径时,系统会在路径前后添加这些不可见字符。
解决方案:
- 直接处理字符串:
import re
path = r"\u202aC:\Users\Example\Documents\u202c"
clean_path = re.sub(r'[\u202a\u202b\u202c\u202d\u202e]', '', path)
print(clean_path) # 输出: C:\Users\Example\Documents
- 更安全的方法(推荐):
def clean_windows_path(copied_path):
"""清理从Windows复制的路径中的Unicode控制字符"""
# 移除所有Unicode控制字符(U+202A到U+202E)
import unicodedata
cleaned = ''.join(
ch for ch in copied_path
if unicodedata.category(ch) != 'Cf' # Cf = Control character, format
)
return cleaned.strip()
# 使用示例
dirty_path = "\u202aC:\\Users\\Test\\file.txt\u202c"
clean_path = clean_windows_path(dirty_path)
print(f"原始路径: {repr(dirty_path)}")
print(f"清理后: {clean_path}")
- 预防措施:
- 在粘贴路径前先粘贴到记事本清除格式
- 使用
pathlib库处理路径:
from pathlib import Path
# 让pathlib帮你处理
path = Path(r"\u202aC:\Users\Example\u202c").resolve()
print(path) # 自动解析为正确路径
根本原因:这是Windows资源管理器为了处理从右到左语言(如阿拉伯语、希伯来语)的路径显示而添加的,但复制时这些控制字符会一并被复制。
建议用pathlib或正则清理一下路径字符串。
网上说手输路径,手动输入也是一样的错
py 版本多少~我 3.6.7 和 3.6.8 没问题
应该是你直接从文件的属性界面直接复制的路径吧
把这个这个所在的字符串整个删掉(包括引号),再手动敲一遍就好了
3.7.2
关键是只有部分文件这样,大部分正常的,手敲也是一样的
换个编辑器试试,比如 vs、vim
Use Raw String, r’D:\bulkControl\20181129\009.jpg’
解决了,是因为有些文件名中有繁体中文,导致的编码有误
之前遇到过的就是在文件属性->安全选项卡的路径复制出来就会有这个 \u202a 

