如何检测字符串字节编码?

Phi*_*hil 31 python string unicode encoding byte

我有大约1000个文件名读取os.listdir(),其中一些以UTF8编码,一些是CP1252.

我想将它们全部解码为Unicode,以便在我的脚本中进一步处理.有没有办法让源编码正确解码为Unicode?

例:

for item in os.listdir(rootPath):

    #Convert to Unicode
    if isinstance(item, str):
        item = item.decode('cp1252')  # or item = item.decode('utf-8')
    print item
Run Code Online (Sandbox Code Playgroud)

luc*_*mia 31

如果你的文件在cp1252utf-8,那么有一个简单的方法.

import logging
def force_decode(string, codecs=['utf8', 'cp1252']):
    for i in codecs:
        try:
            return string.decode(i)
        except UnicodeDecodeError:
            pass

    logging.warn("cannot decode url %s" % ([string]))

for item in os.listdir(rootPath):
    #Convert to Unicode
    if isinstance(item, str):
        item = force_decode(item)
    print item
Run Code Online (Sandbox Code Playgroud)

否则,有一个charset检测lib.

Python - 检测字符集并转换为utf-8

https://pypi.python.org/pypi/chardet


geo*_*rge 25

使用chardet库.这非常容易

import chardet

the_encoding = chardet.detect('your string')['encoding']
Run Code Online (Sandbox Code Playgroud)

就是这样!

  • 在 Python 3 中:`TypeError:预期类型为 bytes 或 bytearray 的对象,得到:<class 'str'>` (2认同)

Suy*_*mpi 14

您还可以使用json包来检测编码。

import json

json.detect_encoding(b"Hello")
Run Code Online (Sandbox Code Playgroud)