我有一个 python 脚本,最近注意到我在某些输入上遇到了一些编码错误。我注意到“智能报价”引起了问题。我想知道如何克服这个问题的建议。我正在使用Python 2,所以需要告诉我的脚本我想用 UTF-8 编码所有内容。
我认为这样做就足够了:
mystring.encode("utf-8")
并且在很大程度上它有效,直到我遇到聪明的报价(并且可能还有许多其他事情会导致问题,因此我在这里发帖。)例如:
mystring = "hi"
mystring.encode("utf-8")
输出是
'hi'
但为此:
mystring2 = "’"
mystring.encode("utf-8")
输出是
UnicodeDecodeError
Traceback (most recent call last)
<ipython-input-21-f563327dcd27> in <module>()
----> 1 mystring.encode("utf-8")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in
position 0: ordinal not in range(128)
我创建了一个函数来处理我得到的 JSON 输入(有时我得到 null/None值,有时我得到数值,虽然主要是 unicode,因此为什么我有几个 if 语句):
def xstr(s):
if s is None:
return ''
if isinstance(s, basestring):
return str(s.encode("utf-8"))
else:
return str(s)
这很有效(直到这个智能报价问题)
我的两个问题是:
为什么不能用 UTF-8 编码“智能引号”,UTF-8 是否还有其他限制,或者我是否完全误解了我所看到的?
我使用的方法(即使用我的自定义函数)是处理这个问题的最佳方法吗?我尝试使用 try/except 来捕捉智能引号的情况,但这没有用。
慕尼黑8549860
相关分类