我必须在Python中做什么来找出字符串的编码?


当前回答

您可以使用通用编码检测器,但请注意,它只会给您最好的猜测,而不是实际的编码,因为不可能知道字符串“abc”的编码。您将需要在其他地方获取编码信息,例如HTTP协议使用内容类型报头。

其他回答

在python中3。x所有字符串都是Unicode字符的序列。使用isinstance检查STR(默认为unicode字符串)就足够了。

isinstance(x, str)

关于python 2.x, 大多数人似乎都在使用带有两次检查的if语句。一个用于STR,一个用于unicode。

如果你想检查你是否有一个'string-like'的对象,并且只有一个语句,你可以这样做:

isinstance(x, basestring)

Unicode不是一种编码——引用Kumar McMillan的话:

如果ASCII, UTF-8和其他字节字符串是“text”… ...那么Unicode就是“文本性”; 它是文本的抽象形式

读一读McMillan在PyCon 2008上的Unicode In Python,完全解密的演讲,它比Stack Overflow上的大多数相关答案更好地解释了事情。

use:

import six
if isinstance(obj, six.text_type)

在六个库中,它被表示为:

if PY3:
    string_types = str,
else:
    string_types = basestring,

在python3中,所有字符串都是Unicode字符的序列。有一种bytes类型保存原始字节。

在python2中,字符串的类型可以是str或unicode。你可以用如下代码来区分:

def whatisthis(s):
    if isinstance(s, str):
        print "ordinary string"
    elif isinstance(s, unicode):
        print "unicode string"
    else:
        print "not a string"

这并不区分“Unicode或ASCII”;它只区分Python类型。Unicode字符串可以由ASCII范围内的纯字符组成,字节字符串可以包含ASCII、编码的Unicode,甚至是非文本数据。

对于py2/py3兼容性,只需使用

进口六 如果isinstance(obj, six.text_type)