Django:在视图中访问时,settings.py中的重音字符会被破坏

时间:2012-05-26 15:32:41

标签: django unicode encoding character-encoding

我在settings.py中使用getattr(settings,'MY_CONSTANT_NAME',[])在视图中访问了字符,但是getattr()调用返回了破碎的字符(例如,“ô”变为:“\ XC3 \ XB4" )。

这是view.py中的代码:

    from django.conf import settings

    def getValueFromSetting(request):
        mimetype = 'application/json' 
        charset=utf-8' datasources = getattr(settings, 'MY_CONSTANT_NAME', []) 
        config= '{' 
        config+= '"datasources": ' + str(datasources).replace("'", '"') 
        config+= '}'

        return HttpResponse(config,mimetype)                      

到目前为止我尝试解决问题:

  • 我把# - - coding:utf-8 - - 作为我的settings.py的第一行和我的views.py
  • 我在settings.py中的特殊字符前面放了u'ô'或unicode('ô')
  • 我在settings.py
  • 中放了DEFAULT_CHARSET ='utf-8'
  • 我尝试了所有可能的.decode('utf-8'),。encode('utf-8'),。decode('iso-8859-1'),。encode('iso-8859-1)的组合')在settings.py或views.py中的特殊字符...

没有什么能解决问题。

有任何解决这个问题的建议吗?

谢谢

艾蒂安

1 个答案:

答案 0 :(得分:1)

我假设您在浏览器中看到了这些\xc3\xb4字符串。您是否尝试过编辑模板文件以在HTML标头中定义正确的字符集?

<head>
  <meta name="description" content="example" />
  <meta name="keywords" content="something" />
  <meta name="author" content="Etienne" />
  <meta charset="UTF-8" />      <!--  <---- This line -->
</head>

在此回答中首次发表评论后进行修改:

我怀疑getattr不能用于ascii编码以外的其他操作。您是否认为以下内容不符合您的要求?

from django.conf import settings

def getValueFromSetting(request):
    myConstantValue = settings.MY_CONSTANT_NAME
    # check myConstantValue here

在上次评论后修改:

我想我现在理解你的问题。您不喜欢视图返回的JSON仅为ASCII的事实。我建议您使用与Python捆绑在一起的dumps模块提供的json函数。这是一个例子:

# -*- coding: utf-8 -*-
# other required imports here
import json

def dumpjson(request):
   response = HttpResponse(json.dumps(settings.CONSTANT_TUPLE, encoding='utf-8', ensure_ascii=False), content_type='application/json')

   return response

示例中的CONSTANT_TUPLE只是我DATABASESsettings.py的副本。

这里重要的一点是ensure_ascii=False。你能试试吗?这就是你想要的吗?