2017-09-13 49 views
0

我使用背景虚化创造一个互动的情节,当我运行的Python:问题与Windows编码时运行的背景虚化服务(背景虚化绘图库)

boken serve myapp.py

我得到了

'gbk' codec can't decode byte 0xad in position 2196: illegal multibyte sequencencoding

我知道这与codec问题有关,因为我一直在使用中文字符。有a similar discussion in stackoverflow。然而,在这里我无法使用output_file来设置编码,因为我在这里需要curdoc来代替。我该如何解决这个问题?我正在使用支持汉字的Window机器,尝试过chcp 65001,它也不起作用。

+0

在核心Bokeh中可能需要做一些工作才能实现此功能。我建议用完整的详细信息(例如,重现问题的完整示例代码)提供GH问题,并可用于帮助测试。核心开发人员都没有真正使用Windows,或者对非UTF8编码有很多经验,所以为了解决这个问题,需要与其他人合作。 – bigreddot

回答

0

我找到了解决方案。希望这会有所帮助。

问题是在site-packages\bokeh\application\handlers\script.py第53行。我认为这使用了Windows的默认编解码器(例如'gbk')。

如果你确保你的myapp.py保存在utf8-without-bom,然后改变这一行:

with open(filename, 'r', encoding='utf8') as f:

它应该工作。

+0

也许一些小的更改使其更具可配置性,可以帮助用户。请随时打开一个GitHub问题(或拉请求) – bigreddot

+0

我会试试看。 – gepcel

+0

经过对源代码的深入研究,有很多地方使用'utf-8',我无法做到这一点。因此,也许最简单的方法仍然是在我的回答中,确保脚本以'utf-8'格式保存,并以'utf-8'格式打开。 – gepcel