我有大约1000个os.listdir()
读取的文件名,其中一些是用UTF8编码的,有些是CP1252。
我想将所有这些解码为Unicode,以便在我的脚本中进一步处理。有没有办法让源编码正确解码为Unicode? p>
示例:
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
答案 0 :(得分:30)
如果您的文件位于cp1252
和utf-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
否则,有一个charset detect lib。
答案 1 :(得分:22)
使用chardet库。这非常容易
import chardet
the_encoding = chardet.detect('your string')['encoding']
那就是它!
答案 2 :(得分:0)
您也可以使用 json
包来检测编码。
import json
json.detect_encoding(b"Hello")