首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中确定unicode字符串解码方法的最佳方法是什么?

在python中确定unicode字符串解码方法的最佳方法是什么?
EN

Stack Overflow用户
提问于 2012-01-26 10:18:42
回答 1查看 2K关注 0票数 4

我想知道如何确定unicode的编码。

我知道我在某个地方读过这篇文章,我只是不记得这是否可能,但我想相信有一种方法。

假设我有一个拉丁文1编码的unicode,我想用解码时使用的相同的编码动态地对它进行编码.

坦率地说,我想把它变成一个utf-8 unicode,而不会在使用它之前弄乱字符。

即:

代码语言:javascript
复制
latin1_unicode = 'åäö'.decode('latin-1')
utf8_unicode = latin.encode('latin-1').decode('utf-8')
EN

回答 1

Stack Overflow用户

发布于 2012-01-26 11:08:16

如果在“确定unicode的编码”中,“unicode”是python数据类型,那么您就不能这样做,因为“编码”指的是在输入字符串时表示字符串的原始字节模式(例如,从文件、数据库读取,您可以给它命名)。当它成为python 'unicode‘类型(内部表示)时,字符串要么已被解码到行后,要么已经抛出解码异常,因为字节序列没有与系统编码结合。

Shadyabhi的答案指的是(常见的)情况,在这种情况下,您正在从一个文件中读取字节(您很可能正在字符串中填充字节,而不是python字符串),需要猜测它们保存在哪个编码中。严格地说,不能有"latin1 unicode python“:unicode python字符串没有编码(编码可以定义为将字符转换为字节模式的过程,解码为逆过程;解码后的字符串因此没有编码-尽管可以通过多种方式对其进行编码以实现存储/外部表示)。

例如,在我的机器上:

代码语言:javascript
复制
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将包含垃圾。

所以你(可能)想做的是:

  1. 确定数据源的编码--也许使用Shadyabhi的一种方法
  2. 根据(1)对数据进行解码,将其保存在python字符串
  3. 中,使用原始编码(如果这符合您的需要)或其他您选择的编码。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9016628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档