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控制字符(从左到右嵌入标记)。当你从资源管理器复制路径时,系统会在路径前后添加这些不可见字符。

解决方案:

  1. 直接处理字符串
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
  1. 更安全的方法(推荐)
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}")
  1. 预防措施
  • 在粘贴路径前先粘贴到记事本清除格式
  • 使用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 没问题

应该是你直接从文件的属性界面直接复制的路径吧
把这个这个所在的字符串整个删掉(包括引号),再手动敲一遍就好了

关键是只有部分文件这样,大部分正常的,手敲也是一样的

换个编辑器试试,比如 vs、vim

Use Raw String, r’D:\bulkControl\20181129\009.jpg’

解决了,是因为有些文件名中有繁体中文,导致的编码有误

之前遇到过的就是在文件属性->安全选项卡的路径复制出来就会有这个 \u202a

回到顶部