常在河边走, 湿鞋是顺理成章的事情. 这次遇到的情况简报如下
# encoding=utf-8
import jinja2
import datetime
now = datetime.datetime.utcnow()
print jinja2.Template(u'''当前月份 {{ date.strftime('%Y 年 %m 月') }}''').render(date=now)
Traceback (most recent call last):
File "test.py", line 8, in <module>
print jinja2.Template(u'''当前月份 {{ date.strftime('%Y 年 %m 月') }}''').render(date=now)
File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "<template>", line 1, in top-level template code
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5e74' in position 3: ordinal not in range(128)
一番尝试并寻找之后, 首先发现第一个问题,
datetime.datetime.strftime
函数接受奇怪的字符串会出问题, 比如先来试试看这个now = datetime.datetime.utcnow()
print now.strftime('%Y 年 %m 月')
now = datetime.datetime.utcnow()
print now.strftime(u'%Y 年 %m 月')
u
的 unicode
类型怎么说也坑太深了的感觉吧. (别扯什么 Python str
与 unicode
类型异与同 21 天从入门到精通什么的, 别的语言都没这问题 Python 确有, 这应该就是 Python 的问题了吧.) 在这种情况下如果要用 unicode
还得转一道now = datetime.datetime.utcnow()
print now.strftime(u'%Y 年 %m 月'.encode('utf-8'))