我能检测到字符串中使用的文本编解码器吗?

2024-09-30 08:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从一个文件(任何人都可以修改)中读取一个字符串,但不知道该字符串是哪种编码类型。有没有类似的功能

 getCodec = mystring.getCodec()

会返回类似

^{pr2}$

或者

getCodec = 'ascii'

是吗?在


Tags: 文件字符串功能类型编码asciimystringpr2
3条回答

您可以使用第三方^{}模块。在

>>> import chardet
>>> chardet.detect(b'\xed\x95\x9c\xea\xb8\x80')  # u'한글'.encode('utf-8')
{'confidence': 0.7525, 'encoding': 'utf-8'}
>>> chardet.detect(b'\xc7\xd1\xb1\xdb')
{'confidence': 0.99, 'encoding': 'EUC-KR'}  # u'한글'.encode('euc-kr')

注意:chardet不是万无一失的,如果一个文件足够小,很容易猜错。在

如果您不能使用chardet,并且没有机会预先指定编码,那么我认为您剩下的唯一方法就是猜测它。你可以这样做:

# Add whichever you want to the list, but only end it in a codec like latin1 that never fails
codecs = ["utf-8", "euc-kr", "shift-jis", "latin1"]

def try_decode(text):
    for codec in codecs:
        try:
            return text.decode(codec)
        except UnicodeError:
            continue

不,不存在这样的函数,因为文件不记录用于写入包含的文本的编解码器。在

如果有更多的上下文(比如更具体的格式,如HTML或XML),那么您可以确定编解码器,因为标准指定了一个默认值,或者允许使用编解码器对数据进行注释,但否则您将只能根据内容进行猜测(这就是^{}之类的工具所做的)。在

对于一个任何人都可以修改的文件,您没有希望只能清楚地记录应该使用什么编解码器。在

相关问题 更多 >

    热门问题