Python 3.6(Windows 10)字符串/Unicode异常问题咨询
解决字符串拼接出现\u202a及原始字符串r前缀的疑问
嘿,这个问题我之前踩过坑,给你一步步拆解清楚:
1. 为什么会出现\u202a?
那个\u202a是Unicode左到右控制标记(Left-to-Right Mark),属于隐形的控制字符——你肉眼看不到它,但它实实在在藏在你的test字符串里。
大概率是你复制粘贴test_pilot2.0.1.vhdr这个文件名的时候,从带格式的文本(比如Word、PDF、某些网页)里复制过来的,这些地方的文本可能带有排版控制字符,被一起复制到了字符串里,并不是拼接的时候才加上的,只是拼接后打印输出时,这个隐形字符被显形了。
2. 怎么解决这个问题?
有两种简单的处理方式:
- 手动重新输入:直接在代码里手动敲入
test = "test_pilot2.0.1.vhdr",不要复制粘贴,从根源避免带入隐形控制字符; - 清理字符串:如果必须用复制的内容,可以用代码过滤掉这类控制字符:
或者精准替换掉import unicodedata # 清理所有非可见的控制字符 test = unicodedata.normalize("NFKD", test).encode("ascii", "ignore").decode("ascii")\u202a:test = test.replace("\u202a", "")
3. 为什么加r前缀能解决路径的Unicode误解?
r前缀是用来定义**原始字符串(Raw String)**的,它的核心作用是:把字符串里的反斜杠\当作普通字符,不会将其解析为转义符。
在Windows路径里,很多人习惯用\分隔(比如C:\Users\xxx),但Python里\U、\u是Unicode转义的开头,直接写C:\Users\xxx会被Python误以为是要解析Unicode字符,从而报错。而加了r之后,r"C:\Users\xxx"里的\就只是普通的路径分隔符,不会被转义,所以问题就解决了。
不过你当前的path2用的是/作为分隔符,这种写法本来就不会触发转义问题,可能是你之前用\写路径时碰到过错误,加r解决了,所以才有这个印象~
内容的提问来源于stack exchange,提问作者p.deman
相关产品推荐
相关产品推荐

