for key, value in supportProjectDict.iteritems():
line = re.sub(r'%s,' % key, r'%s,' % value, line.decode('utf-8'), flags=re.UNICODE)
尝试通过用相应的值替换字典中找到的任何键来进行正则表达式替换,但一旦遇到非 ASCII 字符就会出现此错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 186: ordinal not in range(128)
难道不应该使用 re.UNICODE 标志来阻止这种情况吗?
最佳答案
每次使用变量都需要使用.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
关于python - 'Ascii' 编解码器无法在位置 186 : ordinal not in range(128) 对字符 u'\u201d' 进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221977/