我将BaaS用于我的前端。它允许我使用我的后端逻辑上传一个javascript文件。我可以在客户端通过REST API使用它。 在其他服务中,我实施了本地化服务。字符串预定义如下:
var locals = {
"EN": {
"1": "Home",
"2": "Ready"
},
"BG": {
"1": "Начало",
"2": "Готово"
}
在这个例子中,我提供英语和保加利亚字符串的本地化。 问题是BaaS系统不尊重西里尔字符(Unicode)。 当我上传包含上述内容的脚本时,所有的西里尔字符都被替换为“????”。
我可以使用this method来解决问题,但不推荐使用escape / unescape函数。 有没有更好的解决方案? 避免这个问题的最有效方法是什么?
答案 0 :(得分:6)
要在未安装Unicode安全的JavaScript文件中引用非ASCII字符,请使用JS字符串文字字符转义:\uNNNN
其中NNNN是UTF-16代码单元的十六进制数与字符串相关联(与基本多语言平面中的字符的代码点编号相同)。
"BG": {
"1": "\u041d\u0430\u0447\u0430\u043b\u043e",
"2": "\u0413\u043e\u0442\u043e\u0432\u043e"
}
西里尔字符here的代码点列表。您也可以使用Firefox的toSource
方法为您解决问题:
> 'Начало'.toSource()
(new String("\u041D\u0430\u0447\u0430\u043B\u043E"))
当我上传包含上述内容的脚本时,所有西里尔字符都替换为" ????"。
你确定这是“BaaS”的错吗?我们无法告诉您,因为您没有告诉我们这项服务是什么,甚至是什么样的服务。
如果它是您通过Ajax获取的JS文件,则需要将文件保存为UTF-8编码,以便能够使用非ASCII字符,而无需按上述方式对其进行编码。如果您使用脚本元素包含它,则还需要将HTML页面保存为UTF-8并包含UTF-8 meta charset
指令。