我尝试了很多方法来转换字符串,如b' \ xef \ xbb \ xbf \ xe5 \ x9b \ xbd \ xe9 \ x99 \ x85 \ xe5 \ x8f \ x8b \ xe8 \ xb0 \ x8a&#39 ;但是都失败了。
当我使用
时,真的很奇怪打印(B' \ XEF \ XBB \ XBF \ xe5 \ x9b \ XBD \ xe9 \ X99 \ X85 \ xe5 \ X8F \ x8b \ xe8 \ XB0 \ x8a&#39)
它将显示已解码的汉字。
但是如果我通过读取我的CSV文件获得了字符串,它就不会这样做。无论我如何解码字符串,它只会显示b' \ xef \ xbb \ xbf \ xe5 \ x9b \ xbd \ xe9 \ x99 \ x85 \ xe5 \ x8f \ x8b \ xe8 \ xb0 \ x8a'
这是我的剧本:
import csv
with open('need_convert.csv','r+') as csvfile:
reader=csv.reader(csvfile)
for row in reader:
new_row=''.join(row)
print('new_row:')
print(type(new_row))
print(new_row)
print('convert:')
print(new_row.decode('utf-8'))
这是我的数据(csv文件): B' \ XEF \ XBB \ XBF \ xe5 \ x9b \ XBD \ xe9 \ X99 \ X85 \ xe5 \ X8F \ x8b \ xe8 \ XB0 \ x8a' B' \ XEF \ XBB \ XBF \ xe9 \ XBA \ X92 \ xe9 \ XBA \ x9f \ XE6 \ x9d \ XAF' B' \ XEF \ XBB \ XBF \ xe5 \ x9b \ XBD \ xe9 \ X99 \ X85 \ xe5 \ X8F \ x8b \ xe8 \ XB0 \ x8a'
答案 0 :(得分:1)
row
内容和new_row
都是字符串,而不是字节类型。下面,我假设输入是安全的,使用exec('s=' + row[0])
来解释它们。
import csv
with open('need_convert.csv','r+') as csvfile:
reader=csv.reader(csvfile)
for row in reader:
print(type(row[0]), row[0])
exec('s=' + row[0])
print(type(s), s)
print(s.decode('utf-8'))
输出:
<class 'str'> b'\xef\xbb\xbf\xe5\x9b\xbd\xe9\x99\x85\xe5\x8f\x8b\xe8\xb0\x8a'
<class 'bytes'> b'\xef\xbb\xbf\xe5\x9b\xbd\xe9\x99\x85\xe5\x8f\x8b\xe8\xb0\x8a'
国际友谊
<class 'str'> b'\xef\xbb\xbf\xe9\xba\x92\xe9\xba\x9f\xe6\x9d\xaf'
<class 'bytes'> b'\xef\xbb\xbf\xe9\xba\x92\xe9\xba\x9f\xe6\x9d\xaf'
麒麟杯
<class 'str'> b'\xef\xbb\xbf\xe5\x9b\xbd\xe9\x99\x85\xe5\x8f\x8b\xe8\xb0\x8a'
<class 'bytes'> b'\xef\xbb\xbf\xe5\x9b\xbd\xe9\x99\x85\xe5\x8f\x8b\xe8\xb0\x8a'
国际友谊