如果显式定义,则以下unicode和字符串可以独立存在:
>>> value_str='Andr\xc3\xa9'
>>> value_uni=u'Andr\xc3\xa9'
如果我只将u'Andr\xc3\xa9'
分配给上面这样的变量,如何在Python 2.5或2.6中将其转换为'Andr\xc3\xa9'
?
编辑:
我做了以下工作:
>>> value_uni.encode('latin-1')
'Andr\xc3\xa9'
解决了我的问题。有人能告诉我到底发生了什么事吗?
Tags:
你的编码好像弄混了。似乎你真正想要的是
u'Andr\xe9'
,相当于'André'
。但你看到的似乎是一个未正确解码的UTF-8编码。您可以通过将unicode字符串转换为普通字符串来修复它。我不知道最好的方法是什么,但这似乎有效:
然后正确解码:
现在它的格式是正确的。
但是,如果可能的话,您应该先找出数据编码错误的原因,然后在那里解决这个问题。
你问(在评论中)“”“这就是让我困惑的地方。它是怎么从原来的口音变成现在的?当你说用utf8和latin1进行双重编码时,总共是3种编码(2 utf8+1 latin1)吗?从原始状态到当前状态的编码顺序是什么
在马克·拜尔斯的回答中,他说“你所拥有的似乎是一种未正确解码的UTF-8编码”。你已经接受了他的回答。但你还是很困惑?好的,这是一个接一个的描述:
注意:所有字符串都将使用(隐式地)
repr()
显示。unicodedata.name()
将用于验证内容。这样,控制台编码的变化就不会混淆字符串的解释。初始状态:您有一个名为u1的unicode对象。它包含e-acute:
将u1编码为UTF-8并将结果命名为:
你用latin1解码s——不正确;s是用utf8编码的,不是latin1。结果是毫无意义的垃圾。
请理解:
unicode_object.encode('x').decode('y)
当x!=y通常是胡说八道;如果你运气好,它会引发一个异常;如果你运气不好,它会无声地制造出胡言乱语。另外,请理解,无声地创建乱七八糟并不是一个bug——Python(或任何其他语言)无法检测出有人犯下了无意义的错误。这尤其适用于涉及latin1的情况,因为所有256个代码点都将1映射到1,其中包含前256个Unicode代码点,因此无法从str_object.decode('latin1')获取UnicodeDecodeError。当然,不正常的(人们希望这是不正常的)你可能需要做
gibberish_unicode_object.encode('y').decode('x')
来扭转这样的胡说八道,正如你的问题的各种答案所建议的那样。value_uni.encode('utf8')
或您需要的任何编码。见http://docs.python.org/library/stdtypes.html#str.encode
相关问题 更多 >
编程相关推荐