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


当前回答

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

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

其他回答

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

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

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

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

isinstance(x, str)

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

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

isinstance(x, basestring)

一种简单的方法是检查unicode是否是内置函数。如果是,你在python2中,你的字符串将是一个字符串。要确保所有内容都使用unicode,可以执行以下操作:

import builtins

i = 'cats'
if 'unicode' in dir(builtins):     # True in python 2, False in 3
  i = unicode(i)

use:

import six
if isinstance(obj, six.text_type)

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

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

在Python-3中,我必须理解字符串是否像b='\x7f\x00\x00\x01'或b='127.0.0.1'我的解决方案是这样的:

def get_str(value):
    str_value = str(value)
    
    if str_value.isprintable():
        return str_value

    return '.'.join(['%d' % x for x in value])

对我有用,我希望对有需要的人有用