【发布时间】:2019-08-20 06:45:46
【问题描述】:
我在使用 apache.beam 管道将数据写入 bigquery 时遇到错误(字段 string_value 遇到非 ASCII 字符串 '\xe2\x80\x93':'ascii' 编解码器无法解码字节 0xe2)。
我从 http 请求中获取数据,响应正文包含“\xe2\x80\x93”而不是“–”(短划线)。
问题 1: "\xe2\x80\x93" 和 "–"(en-dash) 有什么区别,而它们的打印是一样的?
>>> a='\xe2\x80\x93'
>>> a
'\xe2\x80\x93'
>>> print a
–
>>> b='–'
>>> b
'–'
>>> print b
–
问题 2: 如何将“\xe2\x80\x93”更改为“–”(短划线)?预期结果是:
>>> a='\xe2\x80\x93'
>>> (some operation to a here)
>>> a
'–'
>>> print a
–
之所以要改,是因为发现“-”(破折号)可以成功写入bigquery,而“\xe2\x80\x93”会抛出上述错误。
还有其他字符有这个问题,所以我不能只替换“\xe2\x80\x93”。
谢谢。
【问题讨论】:
-
您的
-(b) 是常规的 ASCII 连字符减号。另一个是破折号。 -
stackoverflow.com/questions/29968179/…。听起来很傻,但为什么不
if a == '\xe2\x80\x93': a = '-'? -
@deceze 谢谢,但我可以将“a”更改为破折号(字符串,而不是字节)吗?
-
@SergioPulgarin 谢谢,"\xe2\x80\x93" 只是其中一种情况,其他字符可能会抛出类似的错误
-
我明白了,然后我会说跟进我发布的答案以及他们提供的链接,并以正确的方式进行。
标签: python python-2.7 encode