如何在Python3中将字符串转换为unicode?

时间:2018-06-19 01:55:16

标签: python decode

我尝试了很多方法来转换字符串,如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'

1 个答案:

答案 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'
国际友谊