IP Address:3.95.131.208



Flask框架是一种轻量级的Python语言Web框架,其Jinja模板系统功能十分强大,方便进行动态内容的展示。

前些日子用Flask写了个小网站,在使用Jinja模板时遇到了一个大坑,记录一下处理过程供大家参考。

故障现象

使用模板系统调用不同页面时,发现有一些CSS模式不能正确应用到对应页面。用浏览器打开网页,查看源代码时发现页面”DOCTYPE html”标签显示为红色,但是又看不出有其它什么问题,如下图所示:

故障分析

为这个问题折腾了很久,开始以为Jinja模板有问题,但是同样的这套模板在全英文页面显示就是正常的,并且调用模板也不会出现问题,于是大概觉得可以是因为在模板中使用了中文字体,编码不致造成的。如果把上面错误的页面源代码粘贴到PyCharm中,发现源代码前面和后面各有一个空白。

在网上查了很久,才知道即使是统一采用UTF-8编码,也有加不加BOM的区分,而所谓的BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,但这样的文件在 Windows 之外的操作系统里会带来问题。而如果在网页中使用了带有BOM的UTF-8编码就会产生错误。

故障处理

原因找到以后,再处理起来就比较容易了,把所有模板文件都重新转换一下编码就可以了。

记得以后再使用Jinja模板时,一定要注意源文件编码保持一致,最好使用同一种文本编辑器,在网页中出现中文时要再加注意。

发表评论

电子邮件地址不会被公开。 必填项已用*标注