<script type="text/javascript" charset="UTF-8">
似乎没有做这项工作:(
我将从顶部开始,因为我正在寻找的解决方案可能不是我要求的解决方案。
所以我在一个简单的CRM上。其中一个“简单”功能是向客户注册尚未在Customers
数据库中的请求 - 如果CRM无法找到名称与提供的客户相匹配的客户,则会注册新客户。这个非常受欢迎的功能会导致很多Customers
个实体的名称属性都是空的。
稍后用户会添加联系人属性,但工作流程非常缓慢且无聊。为了加快速度,我编写了一个python函数,它在local yellow pages上通过它的名称查找客户,解析HTML并将其转换为dict()。这需要相当长的时间,所以我把它放在单独的查询页面上,根据请求,它是红色的。
查询页面将字典呈现为如下字符串:
[{'name': '"AG \xc4\x80bolti\xc5\x86a b\xc5\xabvuz\xc5\x86\xc4\x93mums", SIA', 'phone': '67244222'}]
注意文字UTF-8编码
$.get('/zl?name=AG SIA ĀBOLTIŅA BŪVUZŅĒMUMS', function(data){...
检索上面看到的相同方式。将检索到的dataString转换为Object result = eval(data)[0]
。所以现在$('#zl').html(result.name)
使"AG ÄboltiÅa bÅ«vuzÅÄmums", SIA
不是“ĀBOLTIŅABŪVUZŅĒMUMS”应该是。
我在页面标题中有<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
,脚本以<script type="text/javascript" charset="UTF-8">
开头,但没有任何帮助。
所以问题:
string.toProperUTF-8()
?.decode(UTF-8)
python词典而不会导致服务器错误?答案 0 :(得分:3)
这不起作用,因为Javascript和Python具有不同的字符转义语义
如果我做对了,你就是eval
json,当你进入你的javascript时,你可以把它变成一个对象。
请不要这样做。
相反,使用python的内置json
模块使用格式正确的json回复请求,然后在javascript中使用JSON.parse()
来阅读回复。这应该确保解析正确进行。
一个简单的例子,从python开始:
import json
# lots of code...
@route("/my_page")
def my_page(request):
return json.dumps({
"siblings":["Eenie", "Meanie", "Meinie", "Mo"],
"ages":[1,2,3,4]
})
# lots more code...
现在从Javascript调用:
$.getJSON('/my_page', function(data, textStatus, jqXHR) {
/* Do stuff with the object */
});
请注意我如何使用jQuery内置getJSON()
来获取对象。您也可以使用普通的旧AJAX和JSON.parse()
。
为什么eval()
是个坏主意
使用eval而不是JSON.parse()
实际上会将代码打开到大量安全漏洞。如果恶意用户(或分散注意力的开发人员)可以在请求中放置JavaScript代码,则代码可以自由统治您的页面,这会损害用户的安全性并导致一些非常难以发现的错误。生产页面在任何情况下都不应该使用eval()
,特别是当被评估的数据不受信任时,就像它来自网络一样。
关于mime类型的随机说明
虽然在大多数情况下这不会导致问题,但应确保python代码返回correct mime type for JSON。如果出错,可能会导致调试棘手的奇怪问题。如何执行此操作取决于您使用的python框架。