django makemessages时出现DjangoUnicodeDecodeError

今天对www.fachun.net做了些改动,需要增加一点翻译。

当我执行django-admin.py makemessages -l en时,遇到了DjangoUnicodeDecodeError,

DjangoUnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xcd in position 12: in
valid continuation byte. You passed in ‘2013/10/11 \xcd\xea\xb3\xc9\xc1\xcb\xd5
\xbe\xb5\xe3\xb5\xc4\xb9\xfa\xbc\xca\xbb\xaf\xa3\xac\xb2\xb9\xb3\xe4\xc1\xcb\xd3
\xa2\xce\xc4\xb7\xad\xd2\xeb\n\n2013/10/12 \xca\xb5\xcf\xd6\xc1\xcb\xa1\xb0\xbb
\xbb\xd2\xbb\xc5\xfa\xb9\xa6\xc4\xdc\xa1\xb1\xa1\xa2\xd4\xda\xb2\xbb\xcd\xac\xd3
\xef\xd1\xd4\xd1\xa1\xd4\xf1\xcf\xc2\xb8\xdf\xc1\xc1\xb2\xbb\xcd\xac\xb5\xc4\xce
\xc4\xd7\xd6,\xca\xb5\xcf\xd6\xc1\xcb\xb6\xe0\xd3\xef\xd1\xd4URL\xb2\xee\xd2\xec
\xbb\xaf\xb5\xc4\xd3\xc5\xbb\xaf\n\n2013/’ (<type ‘str’>)

看名字知道是出现了uniocde解码错误。

但自己一向非常注意编码问题,数据库、文件都是以utf8编码保存的。

因为错误信息没有提到是在哪个文件出现问题,

我在python里将上述字符串打印出来,发现竟然是更新记录:

DjangoUnicodeDecodeError-print

这样就定位到出现问题的文件,它是app目录下的一个logs.txt文件。

按个人理解,这个文件是不应该被makemessages处理的,它既非模板,又不是.py文件或.po文件。

但makemessages不想遗漏需要处理的文件,也可以理解。

为什么这个文件会出现问题呢?因为它是我用记事本在windows下直接创建和保存的。

在windows下,记事本默认地将这个文件以”ANSI code page”编码保存。

我使用win7中文版(codepage = 936),文件就默认以GBK编码保存,跟我在cmd下默认是gbk编码一样。

 

知道了出错的原因,再次用记事本打开文件,另存utf8就行了。

不得不说,windows的记事本真是很奇葩。

有Ctrl + S保存习惯的同学可以考虑Alt + F + A另存为utf8,或者用editPlus