【发布时间】:2018-05-30 15:30:57
【问题描述】:
Python 版本:Python 3.6。 我正在尝试用常规撇号替换 Unicode 字符 u"\u0092" (又名卷曲撇号)。
我已经尝试了以下所有方法:
mystring = <some string with problem character>
# option 1
mystring = mystring.replace(u"\u0092", u\"0027")
# option 2
mystring = mystring.replace(u"\u0092", "'")
# option 3
mystring = re.sub('\u0092',u"\u0027", mystring)
# option 4
mystring = re.sub('\u0092',u"'", mystring)
以上都没有更新 mystring 中的字符。其他子和替换操作正在工作 - 这让我认为这要么是我使用 Unicode 字符的问题,要么是这个特定字符的问题。
更新:我也尝试了下面的建议,但都不起作用:
mystring.decode("utf-8").replace(u"\u0092", u"\u0027").encode("utf-8")
mystring.decode("utf-8").replace(u"\u2019", u"\u0027").encode("utf-8")
但它给了我错误:AttributeError: 'str' object has no attribute 'decode'
澄清一下:IDE 不是这里的核心问题。我的问题是为什么当我使用 Unicode 字符运行 replace 或 sub 并打印结果时它没有注册 - 该字符仍然存在于字符串中。
【问题讨论】:
-
str.decode("utf-8").replace(u"\u0092", u"\u0027").encode("utf-8")
-
感谢您的建议 - 我在上面提到的另一个问题上看到了这一点,但它适用于 Python3 吗?当我尝试它时,我收到错误:AttributeError:'str' object has no attribute 'decode'
-
所有字符串在 python3 中都是 unicode。你不需要到处都有
us 和编码的所有民间传说。只需string.replace("’", "'")(事实上,我在我的回答中假设你正在运行python2) -
如果我尝试直接使用该字符 - 有或没有 u 的前缀,我会收到此错误: SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0x92 in position 0:无效的起始字节