3

我的 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 的第一行
  • 我将 u'ô' 或 unicode('ô') 放在 settings.py 中的特殊字符前面
  • 我把 DEFAULT_CHARSET = 'utf-8' 在 settings.py
  • 我尝试所有可能的 .decode('utf-8')、.encode('utf-8')、.decode('iso-8859-1')、.encode('iso-8859-1') 组合settings.py 或views.py 中的特殊字符...

没有什么能解决问题。

有什么建议可以解决这个问题吗?

谢谢

艾蒂安

4

1 回答 1

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只是DATABASES我的settings.py.

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

于 2012-05-26T15:42:12.807 回答