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

4

我尝试了很多方法将类似于b'\xef\xbb\xbf\xe5\x9b\xbd\xe9\x99\x85\xe5\x8f\x8b\xe8\xb0\x8a'的字符串转换为中文字符,但都失败了。

真奇怪,当我只使用

print(b'\xef\xbb\xbf\xe5\x9b\xbd\xe9\x99\x85\xe5\x8f\x8b\xe8\xb0\x8a')

它会显示解码后的中文字符。

但如果我从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国际友谊' b'\xef\xbb\xbf麒麟杯' b'\xef\xbb\xbf国际友谊'


1
请勿将编程代码/数据作为图片发布。请以文本形式发布。 - user3483203
你尝试过这个吗:print(str(your_encoding)) - Fallenreaper
1
欢迎来到Stack Overflow!请编辑您的问题,将Python代码作为文本包含在内,并在文本形式中包含更多编码字符的示例。谢谢! - David
你需要使用正确的编码方式进行读取。 - erip
嗨,Fallenreaper,是的,我尝试了你的方法,但不起作用。抱歉。 - Emiya
显示剩余2条评论
1个回答

1

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

当一个人不信任输入时,该怎么办? - Vivian
实现 try: ... except: - mike.k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接