我正在使用chatterbot库开发一个聊天机器人。这个聊天机器人将使用我的母语——斯洛文尼亚语,其中包含许多奇怪的字符(例如:š,č,ž)。我在使用Python 2.7。
字符串的类型是unicode。
当我尝试使用这些奇怪的字符获取响应时,它工作正常,没有问题。例如,在与上述训练代码相同的执行中运行以下代码(当我在训练字符串中将's'更改为'š'和'c'更改为'č'时),不会引发错误:
我无法找到解决此问题的方法。有什么建议吗? 非常感谢您的帮助。 :) 编辑:我使用了
这是我的错误原因。聊天机器人创建的json存储文件是使用本地编码创建的,而不是utf-8。似乎默认的存储(.sqlite3)没有这个问题,所以现在我只会避免使用json存储。但我仍然有兴趣找到解决这个错误的方法。
当我尝试训练机器人时,该库对上述字符存在困难。例如,当我运行以下代码时:
chatBot.set_trainer(ListTrainer)
chatBot.train([
"Koliko imam še dopusta?",
"Letos imate še 19 dni dopusta.",
])
它抛出以下错误:
UnicodeDecodeError: 'utf8'编解码器无法在位置12解码字节0x9a:无效的起始字节
我在文件顶部添加了# -*- coding: utf-8 -*-
行,我还通过我的编辑器(Sublime text 3)将所有使用的文件编码更改为utf-8,我使用以下代码更改了系统默认编码:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
字符串的类型是unicode。
当我尝试使用这些奇怪的字符获取响应时,它工作正常,没有问题。例如,在与上述训练代码相同的执行中运行以下代码(当我在训练字符串中将's'更改为'š'和'c'更改为'č'时),不会引发错误:
chatBot.set_trainer(ListTrainer)
chatBot.train([
"Koliko imam se dopusta?",
"Letos imate se 19 dni dopusta.",
])
chatBot.get_response("Koliko imam še dopusta?")
我无法找到解决此问题的方法。有什么建议吗? 非常感谢您的帮助。 :) 编辑:我使用了
from __future__ import unicode_literals
,使字符串成为unicode类型。我还检查了它们是否真的是unicode类型,使用了type(myString)
方法。
我还想粘贴这个link。
编辑2:@MallikarjunaraoKosuri - s代码可以工作,但在我的情况下,我还有一个东西在聊天机器人实例初始化中,如下所示:chatBot = ChatBot(
'Test',
trainer='chatterbot.trainers.ListTrainer',
storage_adapter='chatterbot.storage.JsonFileStorageAdapter'
)
这是我的错误原因。聊天机器人创建的json存储文件是使用本地编码创建的,而不是utf-8。似乎默认的存储(.sqlite3)没有这个问题,所以现在我只会避免使用json存储。但我仍然有兴趣找到解决这个错误的方法。
from __future__ import unicode_literals
?另外,哪一行引发了解码错误?因为如果字符串是unicode类型的,它们就不应该被解码(它们已经全部解码了),所以也不应该有任何解码错误。 - lenzsetdefaultencoding
被禁用是有原因的(库期望默认为ascii
)。 - Mark Tolonen#coding
声明了源文件的编码方式。请确保你实际上将源文件保存在声明的编码方式下。 - Mark Tolonenfrom __future__ import unicode_literals
。解码错误是在train("Koliko imam še dopusta?", "Letos imate še 19 dni dopusta.")
方法内引发的。 - matiOS