今天写了一段代码,结果改了好几次,特此记录一下。
功能:传入任意字符,将其decode为unicode字符。
version1
1
2
3
4
| import chardet
def convert_charset_to_unicode(charset, default='utf-8'):
charset_encoding = chardet.detect(charset).get('encoding') or default
return charset.decode(charset_encoding, 'ignore')
|
问题:
- 效率低下,通常大多数需要decode字符都是utf-8,也就是说只有少数的情况下需要detect
encoding。而现在的情况是每次decode都需要detect,而detect这个操作比较重,因此需要就效率进行一次优化。
version2
1
2
3
4
5
6
7
| import chardet
def convert_charset_to_unicode(charset, default='utf-8'):
try:
return charset.decode(default)
except:
charset_encoding = chardet.detect(charset).get('encoding') or default
return charset.decode(charset_encoding, 'ignore')
|
问题:
- 没有明确定义错误类型,当使用try..except..时,一般异常明确的时候需要指出其异常类型。
version3
1
2
3
4
5
6
7
| import chardet
def convert_charset_to_unicode(charset, default='utf-8'):
try:
return charset.decode(default)
except UnicodeDecodeError:
charset_encoding = chardet.detect(charset).get('encoding') or default
return charset.decode(charset_encoding, 'ignore')
|
小结:注重效率以及明确异常类型。