我从脚本中收到编码错误,如下所示:
from django.template import loader, Context
t = loader.get_template(filename)
c = Context({'menus': menus})
print t.render(c)
File "../django_to_html.py", line 45, in <module>
print t.render(c)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 34935: ordinal not in range(128)
我不拥有该脚本,因此我无法编辑它。我唯一能做的就是更改提供的filename
,使其不包含脚本所针对的Unicode字符。
此文件是我在TextMate中编辑的文本文件。我能做些什么来识别和摆脱脚本正在bar的角色?
我可以使用像iconv这样的东西,如果是这样的话?
谢谢!
答案 0 :(得分:3)
如何找到文件中的所有恶意内容:
import unicodedata as ucd
import sys
with open(sys.argv[1]) as f:
for linex, line in enumerate(f):
uline = line.decode('UTF-8')
bad_line = False
for charx, char in enumerate(uline):
if char <= u'\xff': continue
print "line %d, column %d: %s" % (
linex+1, charx+1, ucd.name(char, '<unknown>'))
bad_line = True
if bad_line:
print repr(uline)
print
示例输出:
line 1, column 6: RIGHT SINGLE QUOTATION MARK
line 1, column 10: SINGLE LOW-9 QUOTATION MARK
u'yadda\u2019foo\u201abar\r\n'
line 2, column 4: IDEOGRAPHIC SPACE
u'fat\u3000space\r\n'
答案 1 :(得分:2)
我不知道为什么你使用Django的模板引擎来创建控制台输出,但是Python wiki显示了一种使用特定于Python的环境变量解决这个on Windows的方法:
设置PYTHONIOENCODING = utf_8
这会将stdout / stderr编码设置为UTF-8,这意味着您可以打印所有Unicode字符。由于Windows中的命令行编码通常不是UTF-8,因此您将看到打印的类似UTF的序列而不是特殊字符。例如:
>>> print u'\u2019'
ΓÇÖ
答案 2 :(得分:1)
该字符位于文件中的位置34935。有用的追溯告诉你。
答案 3 :(得分:0)
\ u2019是一个正确的单引号(http://www.unicode.org/charts/有一个有用的搜索框,您可以在其中输入代码),也许这有助于追踪它。如果您的文件再次以HTML格式结束,则可以使用“符号表示这些字符”。 (正如约翰所指出的,这接受了十六进制表示法。)