如何在express/jade中将非ASCII字符编码为\uXXXX序列

3

我有以下的Express路由:

var data = [
    {
        id: 1,
        title: 'aide-memoire'
    },
    {
        id:2,
        title: 'apres moi'
    }
];

app.get('/', function (req, res) {
    res.render('photo/list', {
        data: data
    });
});

在我的JADE模板中,我通过以下方式获取数据:
!!!5
html
    head
    body
        script
            var data = !{JSON.stringify(calculates)};

但我在客户端上获取该数据数组的方法如下:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script type="text/javascript">
        var data = [
            { "id":1, "title": 'aide-memoire'},
            { "id":2, "title": 'apres moi'}
        ];
        </script>
    </body>
</html>

但我需要将非ASCII字符编码为\uXXXX序列,如下所示:

[
    {"id":1, "title": "aide-m%E9moire"},
    {"id":2, "title": "apr%E8s%20moi"}  
]

如何在express/jade中实现这一功能?

你看过这个吗?http://nodejs.org/api/buffer.html - saada
我该如何将这个用于我的情况? - Erik
看起来你要找的编码是Unicode十六进制转义字符...我不确定它们是如何工作的...尝试在谷歌上搜索这些关键词...祝你好运。 - saada
1个回答

6
JSON.stringify(["ä", "ä"]).replace(/[\u0080-\uFFFF]/g, function(m) {
    return "\\u" + ("0000" + m.charCodeAt(0).toString(16)).slice(-4);
});
//["\u00e4","\u00e4"]

JSON.stringify([{title: "ä"}, {title: "ä"}]).replace(/[\u0080-\uFFFF]/g, function(m) {
    return "\\u" + ("0000" + m.charCodeAt(0).toString(16)).slice(-4);
});
//[{"title":"\u00e4"},{"title":"\u00e4"}]

尽管这样做没有任何用处,而且会浪费CPU资源去提供更大的响应:/请记住,在node.js中使用的每个CPU周期都是整个服务器不可用的CPU周期,除非你使用集群技术。

关于对象数组怎么样?[{title: "ä"}, {title: ""ä""}] - Erik
不应该有影响,因为整个内容都被字符串化了。 - generalhenry
这对于转换属性字符串非常有用,就像native2ascii所做的那样(当然不包括JSON字符串化)。propetiesString.replace(...) --- 非常感谢。 - noderman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接