2024-09-30 08:35:01 发布
网友
我正在从一个文件(任何人都可以修改)中读取一个字符串,但不知道该字符串是哪种编码类型。有没有类似的功能
getCodec = mystring.getCodec()
会返回类似
或者
getCodec = 'ascii'
是吗?在
您可以使用第三方^{}模块。在
>>> 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
如果您不能使用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),那么您可以确定编解码器,因为标准指定了一个默认值,或者允许使用编解码器对数据进行注释,但否则您将只能根据内容进行猜测(这就是^{}之类的工具所做的)。在
对于一个任何人都可以修改的文件,您没有希望只能清楚地记录应该使用什么编解码器。在
您可以使用第三方^{} 模块。在
注意:
chardet
不是万无一失的,如果一个文件足够小,很容易猜错。在如果您不能使用
chardet
,并且没有机会预先指定编码,那么我认为您剩下的唯一方法就是猜测它。你可以这样做:不,不存在这样的函数,因为文件不记录用于写入包含的文本的编解码器。在
如果有更多的上下文(比如更具体的格式,如HTML或XML),那么您可以确定编解码器,因为标准指定了一个默认值,或者允许使用编解码器对数据进行注释,但否则您将只能根据内容进行猜测(这就是^{} 之类的工具所做的)。在
对于一个任何人都可以修改的文件,您没有希望只能清楚地记录应该使用什么编解码器。在
相关问题 更多 >
编程相关推荐