Tmi*_*ner 6 python string utf-8 literals
我有一个UTF-8格式的字符串,但不太确定如何将此字符串转换为相应的字符文字.例如,我有字符串:
我的字符串是: 'Entre\xc3\xa9'
例一:
这段代码:
u'Entre\xc3\xa9'.encode('latin-1').decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
返回结果: u'Entre\xe9'
如果我继续打印这个:
print u'Entre\xe9'
Run Code Online (Sandbox Code Playgroud)
我得到了结果: Entreé
这很棒,接近我的需要.问题是,我不能让'Entre\xc3\xa9'成为一个变量并将其传递给步骤,因为现在它已经破坏了.让这个工作的任何提示?
例:
a = 'Entre\xc3\xa9'
b = 'u'+ a.encode('latin-1').decode('utf-8')
c= 'u'+ b
Run Code Online (Sandbox Code Playgroud)
我希望"c"的结果是:
Entreé
Run Code Online (Sandbox Code Playgroud)
该u''语法仅适用于字符串文字,例如在源代码中定义值.使用语法会导致unicode创建对象,但这不是创建此类对象的唯一方法.
您不能通过unicode在字节字符串u前添加来从字节字符串中创建值.但如果您str.decode()使用正确的编码调用,则会获得一个unicode值.反之亦然,您可以将对象编码 unicode为字节字符串unicode.encode().
请注意,在显示unicode对象时,Python 会再次使用Unicode字符串文字语法(so )来表示它u'...',以便于调试.您可以将表示粘贴回Python解释器并获取具有相同值的对象.
您的a值是使用字节字符串文字定义的,因此您只需要解码:
a = 'Entre\xc3\xa9'
b = a.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
您的第一个示例创建了一个Mojibake,一个包含Latin-1代码点的Unicode字符串,实际上代表UTF-8字节.这就是为什么你必须首先编码为Latin-1(撤消Mojibake),然后从UTF-8解码.
您可能希望在Unicode HOWTO中阅读Python和Unicode .其他感兴趣的文章是:
绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集(没有任何借口!)作者:Joel Spolsky
Ned Batchelder的实用Unicode