pythonunicode转为字符串_如何在Python级别将Unicode转换为字符串?

这篇博客探讨了在Python中将Unicode对象转换为字符串时可能出现的问题。初始状态包含一个Unicode对象U1,编码为UTF-8得到S。错误地用Latin1解码S导致了乱码。文章强调了不同编码间的混淆可能导致错误,并指出无声地创建乱码不是Python的bug。解决方案是通过正确的编码方式来反转之前的错误转换。
摘要由CSDN通过智能技术生成

你(在评论中)问:“这就是让我困惑的地方。它是如何从最初的强调到现在的?当你说用utf8和latin1进行双重编码时,总共有3次编码吗(2次utf8+1次latin1)?从原始状态到当前状态的编码顺序是什么?

在马克·拜尔斯的回答中,他说:“你似乎是一个被错误解码的UTF-8编码。”你已经接受了他的回答。但你还是很困惑?好的,这里是一次又一次的描述:

注意:所有字符串将使用(隐式)显示

repr()

.

unicodedata.name()

将用于验证内容。这样,控制台编码的变化就不会混淆字符串的解释。

初始状态:您有一个名为U1的Unicode对象。它含有E-急性:

>>> u1 = u'\xe9'

>>> import unicodedata as ucd

>>> ucd.name(u1)

'LATIN SMALL LETTER E WITH ACUTE'

将U1编码为UTF-8并将结果命名为S:

>>> s = u1.encode('utf8')

>>> s

'\xc3\xa9'

您使用Latin1解码——不正确;S是使用UTF8编码的,而不是Latin1。结果是毫无意义的垃圾。

>>> u2 = s.decode('latin1')

>>> u2

u'\xc3\xa9'

>>> ucd.name(u2[0]); ucd.name(u2[1])

'LATIN CAPITAL LETTER A WITH TILDE'

'COPYRIGHT SIGN'

>>>

请理解:

unicode_object.encode('x').decode('y)

当X!=Y通常(见下面的注释)是一个胡说八道;如果你运气好,它会引发一个例外;如果你运气不好,它会悄悄地制造出乱说。另外,请理解,无声地创建乱码并不是一个bug——Python(或任何其他语言)无法检测出已提交的胡说八道。这一点尤其适用于涉及Latin1的情况,因为所有256个码点都用前256个Unicode码点映射1到1,因此不可能从str ou object.decode(“Latin1”)中获得unicode decode错误。

当然,不正常地(人们希望它是不正常的),你可能需要通过做来扭转这种胡说八道。

gibberish_unicode_object.encode('y').decode('x')

如你问题的各种答案所建议的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值