JavaScript and UTF-8 coding
JavaScript and UTF-8 coding
<script type="text/javascript" charset="UTF-8">
似乎不做工作:(
我将从头开始,因为我正在寻找的解决方案可能不是我想要的。
所以我用的是一个简单的CRM。它的一个"简单"的功能是注册一个客户的请求,这个客户的请求还没有在Customers
数据库中——如果CRM找不到与所提供的客户名称匹配的客户,那么就注册新客户。这个非常流行的特性导致许多Customers
实体除了公司名称属性外,其他属性都是空的。
后来用户确实添加了联系人属性,但工作流程相当缓慢和无聊。为了加快速度,我写了一个python函数,它根据客户在本地黄页上的名字查找客户,解析HTML并将其转换为dict()。这需要一些时间,所以我把它放在单独的查询页面上,这是JavaScript在请求时显示的。
查询页面将dictionary呈现为如下字符串:[{'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){...
以与上面相同的方式检索。将检索到的数据字符串转换为对象result = eval(data)[0]
。因此,现在$('#zl').html(result.name)
把"AG ÄboltiÅa bÅ«vuzÅÄmums", SIA
不是"ĀBOLTIŅA BŪVUZŅĒMUMS",因为它应该。
我有<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
在页眉和脚本开始与<script type="text/javascript" charset="UTF-8">
,但没有任何帮助。
所以问题:
- 如何设置JS输出的适当编码?有没有像
string.toProperUTF-8()
那样的技巧方法? - 是否有一种方法来
.decode(UTF-8)
python字典而不会导致服务器错误? - 有更少问题的方法吗?
这不起作用,因为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代码为JSON返回正确的mime类型。如果做错了,可能会导致难以调试的奇怪问题。这取决于你使用的python框架。
- 可以't导入更少的UTF-8 BOM编码的文件
- 不能将 UTF-8 字符替换为正则表达式
- 如何在节点中解码 gzip 或 utf-8 响应
- 在JavaScript源代码中使用UTF-8字符文字是否安全
- 显示UTF符号
- Dart web服务器应该对所有内容使用UTF-16编码吗
- 使用javascript中的UTF-8编码生成友好的url
- JavaScript 强制使用 UTF-8 编码
- jQuery 将 “£” 替换为 “£” UTF-8
- 如何通过 ajax 获取 UTF-8 格式的数据
- 编码/解码十六进制为 utf-8 字符串
- 如何通过jQuery $.load()实用程序函数获取PHP将utf-8字符串传递给JavaScript
- unicode to utf-8 in JavaScript
- 如何将动态创建的 IFRAME 的字符集设置为 UTF-7
- 正确的正则表达式来查找和替换转义的 UTF-8 字符串
- 发送 Jquery Ajax 时的 UTF-8 问题
- UTF-8 csv encoding
- 从 utf-8 代码打印/输出 utf-8 字符
- NetBeans IDE CoffeeScript 将 UTF-8 BOM 添加到输出文件中
- JavaScript and UTF-8 coding