TensorFlow 0.12聊天机器人出现UTF-8解码错误,求技术支持
解决TensorFlow聊天机器人测试时的UnicodeDecodeError问题
我之前也碰到过一模一样的问题,这个错误的根源很明确:你的数据集文件用的不是UTF-8编码,而是Windows-1252(或者Latin-1)这类单字节编码,0x92这个字节在Windows-1252里代表智能单引号(’),用UTF-8解码自然会失败。下面是具体的修复步骤:
1. 修改data_utils.py中的词汇表读取函数
找到项目里的data_utils.py文件,定位到initialize_vocabulary函数——这个函数负责加载词汇表文件。原来的代码默认用UTF-8编码打开文件,我们需要给它指定正确的编码:
修改前的代码片段:
def initialize_vocabulary(vocabulary_path): if gfile.Exists(vocabulary_path): rev_vocab = [] with gfile.GFile(vocabulary_path, mode="r") as f: rev_vocab.extend(f.readlines()) rev_vocab = [line.strip() for line in rev_vocab] vocab = dict([(x, y) for (y, x) in enumerate(rev_vocab)]) return vocab, rev_vocab else: raise ValueError("Vocabulary file %s not found.", vocabulary_path)
修改后的代码:
把打开文件的编码指定为cp1252(Windows-1252的标准名称):
def initialize_vocabulary(vocabulary_path): if gfile.Exists(vocabulary_path): rev_vocab = [] # 指定编码为Windows-1252读取文件 with gfile.GFile(vocabulary_path, mode="r", encoding="cp1252") as f: rev_vocab.extend(f.readlines()) rev_vocab = [line.strip() for line in rev_vocab] vocab = dict([(x, y) for (y, x) in enumerate(rev_vocab)]) return vocab, rev_vocab else: raise ValueError("Vocabulary file %s not found.", vocabulary_path)
2. 检查并修复其他数据集读取函数
除了词汇表,训练用的问答对文件大概率也是同样的编码。你需要检查data_utils.py里其他读取文本文件的函数(比如read_data、prepare_custom_data),同样给它们加上encoding="cp1252"参数,确保所有文件都用正确编码读取。
3. 备用方案:用Latin-1编码兜底
如果用cp1252还是报错,可以换成latin-1编码——它是单字节编码,能兼容所有字节值,绝对不会出现解码失败的情况:
with gfile.GFile(vocabulary_path, mode="r", encoding="latin-1") as f:
做完这些修改后,重新运行测试模式,应该就能顺利加载数据,不会再出现解码错误了。
内容的提问来源于stack exchange,提问作者Frederick Steven
相关产品推荐
相关产品推荐

