“Ascii”编解码器无法对位置186中的字符u'\u201d'进行编码:序号不在范围内(128)

2024-10-02 02:45:13 发布

您现在位置:Python中文网/ 问答频道 /正文

for key, value in supportProjectDict.iteritems():
        line = re.sub(r'%s,' % key, r'%s,' % value, line.decode('utf-8'), flags=re.UNICODE)

尝试通过将字典中找到的任何键替换为相应的值来执行正则表达式替换,但一旦遇到非ASCII字符,就会出现此错误:

^{pr2}$

不应该使用re.UNICODE旗帜阻止了这一切?在


Tags: keyinrefor字典valuelineascii
2条回答

这很管用。我使用明显的非ASCII字符串进行测试:

#!python2
#coding:utf8
import re

supportProjectDict = {u'名字':u'马克'} # Note Unicode strings
line = '名字, 有空吗?'                # Note NOT Unicode string.
for key, value in supportProjectDict.iteritems():
        line = re.sub(r'%s,' % key, r'%s,' % value, line.decode('utf-8'), flags=re.UNICODE)
print line

最好在任何地方都使用Unicode:

^{2}$

格式字符串在这个实例中并不重要,因为它们是ASCII,python2将.decode('ascii')隐式地转换为Unicode字符串,但最好是显式的。仅供参考,Python3不进行隐式编码/解码,因此更容易捕获这些错误。在

每次使用变量时都需要使用.decode('utf8'),并且.encode("utf8")结果和所有字符串都应作为Unicode字符串传递:

line = re.sub(ur'%s,' % key.decode('utf8'), ur'%s,' % value.decode('utf8'), line.decode('utf8'), flags=re.UNICODE).encode("utf8")

IDEONE demo

相关问题 更多 >

    热门问题