“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> 
+0

我相信你必须允许Pythonanyhere使用的数据库(它应该是MySQL,但可能已被更改)使用编码utf-8。 –

+2

你的外尝试/ except/404吞噬了真正的错误。摆脱它,看看日志中的实际回溯是什么?它可能不会涉及任何类型的数据库...... – hwjp

你必须允许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是用于存储非拉丁字符的标准编码(例如,西里尔文),然后你需要改变它的字符集和排序规则设置,首先在你的数据库上,然后在每张表上。

如果你有很多表,你可以使用存储过程执行这些命令。

+0

我相信这是针对数据库驱动的应用程序。我的应用程序不需要数据库。它只是通过Wikipedia API请求用户输入。所以当用户输入有特殊字符时,它在开发服务器上可以正常工作,但不能在生产环境中工作 –

+0

“在Django开发服务器中工作正常”,所以基本上你会说你拿出字符串告诉Django DB使用了什么(默认情况下它的SQLlite实例)。此外,“我的Django应用程序托管在pythonanywhere.com不支持utf-8编码”这不是关于你的应用程序,但你在哪里“托管它”,并且可能100%他们使用数据库,从链接它是一个MYSQL实例,他们正式说明如何通过deafault是数据库字符集 。数据存储在数据库中以保持持久性。顺便说一句,我试图有用,试试看。 –