UnicodeEncodeError:“ascii”编解码器无法在位置 126 编码字符 u'\u2019':序数不在范围内(128)
Posted
技术标签:
【中文标题】UnicodeEncodeError:“ascii”编解码器无法在位置 126 编码字符 u\'\\u2019\':序数不在范围内(128)【英文标题】:UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 126: ordinal not in range(128)UnicodeEncodeError:“ascii”编解码器无法在位置 126 编码字符 u'\u2019':序数不在范围内(128) 【发布时间】:2012-01-23 18:43:35 【问题描述】:好的,我已经阅读了许多类似的问题,并且我相信我正确地遵循了建议,但不知何故我的代码仍然无法正常工作。
我已经解析了一个 xml 文件。我在这里读到输出现在是 unicode。我正在使用 csv 编写器将输出写入文件。
因此,在我的代码中,我尝试在使用 writerow 之前使用 utf-8 进行编码。为什么我仍然在 writerow 上收到错误消息?我的警告,“unicode!!!”在发生此错误之前不会被抛出(我在多个文件上运行它,它适用于大多数文件)。但实际上,我不明白为什么作者试图使用 ascii,它不应该期待 utf-8 吗?我在编码函数中用 ascii 替换了 utf-8 只是为了踢球。结果相同。请帮忙!!!
try:
mystring=elem.find('./'+r2+'Description').text
if isinstance(mystring, unicode):
print("unicode!!!")
mystring.encode('utf-8','ignore')
datalist.append(mystring)
else:
datalist.append(mystring)
except AttributeError:
datalist.append('No text')
c.writerow(datalist)
【问题讨论】:
"我已经解析了一个 xml 文件。我在这里读到输出现在是 unicode。"展示如何解析 XML。 【参考方案1】:当您调用mystring.encode(...
时,它不会就地更改字符串;它返回一个新字符串。
【讨论】:
新的字符串叫什么? 哦,快,mystring2=mystring.encode(...) 然后追加 mystring2 工作!谢谢! 什么都不叫;这是一个返回值。原因是 (a) 字符串(Unicode 和字节字符串)是不可变的; (b) 即使它们不是,它们也是两种不同的类型,因此 Unicode 字符串不能直接转换为编码的字节字符串。 好的,知道了。非常感谢这个简单的提示!以上是关于UnicodeEncodeError:“ascii”编解码器无法在位置 126 编码字符 u'\u2019':序数不在范围内(128)的主要内容,如果未能解决你的问题,请参考以下文章
UnicodeEncodeError: 'ascii' 编解码器无法编码字符 u'\u2026'
UnicodeEncodeError: 'ascii' 编解码器无法编码字符 u'\u2013'
UnicodeEncodeError:'ascii'编解码器无法对特殊名称的字符进行编码[重复]
UnicodeEncodeError:'ascii' 编解码器无法在位置 0 编码字符 u'\xef':序数不在范围内(128)
UnicodeEncodeError:'ascii'编解码器无法在位置 3 编码字符 u'\ufffd':序数不在范围内(128)[重复]
UnicodeEncodeError:“ascii”编解码器无法在位置 126 编码字符 u'\u2019':序数不在范围内(128)