我想知道如何确定unicode的编码。
我知道我已经在某个地方读到了这个,我只是不记得是否有可能但我想相信有办法。
假设我有一个带有latin-1编码的unicode,我想用解码时使用的相同编码对其进行动态编码...
坦率地说,我希望将它变成一个utf-8 unicode,而不会在使用它之前弄乱角色。
即:
latin1_unicode = 'åäö'.decode('latin-1')
utf8_unicode = latin.encode('latin-1').decode('utf-8')
答案 0 :(得分:1)
如果在“确定unicode的编码”中,“unicode”是python数据类型,那么就不能这样做,因为“encoding”是指在输入时表示字符串的原始字节模式(比如说) ,从文件,数据库读取,你的名字)。当它变成python'unicode'类型(内部表示)时,字符串要么在行后面解码,要么抛出解码异常,因为字节序列与系统编码不相符。
Shadyabhi的答案指的是你从一个文件中读取字节的(常见)情况(你可能很好地填充字符串 - 而不是python unicode字符串)并且需要猜猜他们保存了什么编码。严格来说,你不能拥有“latin1 unicode python string”:unicode python字符串没有编码(编码可以定义为将字符转换为字节模式并解码为反向过程的过程;解码后的sring因此没有编码 - 虽然它可以用多种方式编码以用于存储/外部表示目的。)
例如在我的机器上:
In [35]: sys.stdin.encoding
Out[35]: 'UTF-8'
In [36]: a='è'.decode('UTF-8')
In [37]: b='è'.decode('latin-1')
In [38]: a
Out[38]: u'\xe8'
In [39]: b
Out[39]: u'\xc3\xa8'
In [41]: sys.stdout.encoding
Out[41]: 'UTF-8'
In [42]: print b #it's garbage
è
In [43]: print a #it's OK
è
这意味着,在您的示例中,如果默认编码恰好是UTF-8或UTF-16,或者与latin1不同的任何内容,则latin1_unicode将包含垃圾。
所以你(可能)想要做的是: