“utf-8”编码在开发服务器上工作,但未部署时
我在pythonanywhere.com上托管的Django应用程序不支持utf-8编码。像'é'这样的字符会返回错误。“utf-8”编码在开发服务器上工作,但未部署时
浏览:
def result_view(request):
if request.method == 'POST':
search = request.POST.get('textfield').encode("utf-8")
print search
try:
try:
value = wikipedia.page(search)
title = value.title
url = value.url
print title
data = wikipedia.summary(search, sentences=10)
except wikipedia.exceptions.DisambiguationError as e:
data = e
title = search + " (Disambiguation)"
u = search.replace(" ", "_")
url = "https://en.wikipedia.org/wiki/" + u
except:
raise Http404()
return render(request, "search/result.html", {'title': title, 'url': url, 'data': data})
else:
return render(request, "search/result.html", {})
的textfield
输入编码与UTF-8和工作在Django开发服务器不错,但在我的pythonanywhere
服务器返回404页。
模板:
<form name="myform" method="POST" action="{% url 'result' %}">
<div class="form-group">
<div class="input-group">
{% csrf_token %}
<input type="text" class="form-control" name="textfield" placeholder="Search" required/>
<div class="input-group-addon">
<span class="glyphicon glyphicon-search"></span>
</div>
</div>
</div>
<button type="submit" class="btn btn-danger btn-lg ">Search</button>
</form>
你必须允许Pythonanyhere使用(它应该是MySQL作为从here但可能已经改变)来使用编码UTF-8,要做到这一点的DB,只需启动一个MySQL控制台,然后运行下面的命令(你的数据库的名称替换数据库名称,当然):
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
然后,对每个表运行此:
ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci;
Utf-8是用于存储非拉丁字符的标准编码(例如,西里尔文),然后你需要改变它的字符集和排序规则设置,首先在你的数据库上,然后在每张表上。
如果你有很多表,你可以使用存储过程执行这些命令。
我相信这是针对数据库驱动的应用程序。我的应用程序不需要数据库。它只是通过Wikipedia API请求用户输入。所以当用户输入有特殊字符时,它在开发服务器上可以正常工作,但不能在生产环境中工作 –
“在Django开发服务器中工作正常”,所以基本上你会说你拿出字符串告诉Django DB使用了什么(默认情况下它的SQLlite实例)。此外,“我的Django应用程序托管在pythonanywhere.com不支持utf-8编码”这不是关于你的应用程序,但你在哪里“托管它”,并且可能100%他们使用数据库,从链接它是一个MYSQL实例,他们正式说明如何通过deafault是数据库字符集 。数据存储在数据库中以保持持久性。顺便说一句,我试图有用,试试看。 –
我相信你必须允许Pythonanyhere使用的数据库(它应该是MySQL,但可能已被更改)使用编码utf-8。 –
你的外尝试/ except/404吞噬了真正的错误。摆脱它,看看日志中的实际回溯是什么?它可能不会涉及任何类型的数据库...... – hwjp