今日为 TeeleBot 编写插件的时候,有幸遇到了Python的疑难杂症之一:中文编码。

在我试图打开一个含有中文字符的文件的时候,报了一个错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 2: invalid start byte

按以往的经验,我会在脚本文件的第一行写上默认编码声明:

#-*- coding:utf-8 -*-

而TeeleBot所有源码文件的头部,我都加上了这句声明。后来查阅Python3的手册才得知,在Python3中,源文件的默认编码为utf-8#-*- coding:utf-8 -*- 这句声明本是服务于Python2的,在Python3中已经废止。因为在Python2中的,若没有声明别的编码方式,则默认以ASCII编码作为标准编码方式的。若在Python3中使用,容易造成编码混乱的问题。

因此,解决办法如下:

1.删除所有源码文件头部的默认编码声明;

2.在需要读取操作中文的地方,手动指定编码为 UTF-8(其实应该是按照utf-8格式解码为unicode);

3.必要情况下可能还需要将含有中文字符的资源文件转换为 UTF-8 格式。