【发布时间】:2016-02-14 14:49:36
【问题描述】:
我想用 javascript 表达表情符号。 我有一个类似...的文件
:-),\ud83d\ude03
^^,\ud83d\ude03
^_^,\ud83d\ude03
:),\ud83d\ude03
:D,\ud83d\ude03
其中包含键和表情符号代理作为值。 我将阅读此内容,如果输入字符串与键匹配,则将单词替换为那些表情符号。
即键入“^^”将被替换为微笑标记。
但是有一点很奇怪,如果我把这些信息作为对象,它会很好地打印表情符号。
喜欢...
this.emojiStore.osx = {
//smile
':-)' : '\ud83d\ude03'
, '^^' : '\ud83d\ude03'
, '^_^' : '\ud83d\ude03'
, ':)' : '\ud83d\ude03'
, ':D' : '\ud83d\ude03'
//frawn
, ':(' : '\ud83d\ude1e'
//crying
, 'T^T' : '\ud83d\ude22'
, 'T_T' : '\ud83d\ude22'
, 'ㅜㅜ' : '\ud83d\ude22'
, 'ㅠㅠ' : '\ud83d\ude22'
//poo
, 'shit' : '\ud83d\udca9'
};
替换部分看起来像...
this.value = emojiList[key];
但是当我从文件中读取信息时,它会打印出像 '\ud83d\ude22' 这样的字符串。
如何用 js 表示代理字符串?(我不想使用 3rd 方库。)
仅供参考,js 文件和目标文件均使用 UTF-8 编码。
======== 文件加载部分
function loadFile(url){
var ret = {};
var rawFile = new XMLHttpRequest();
// rawFile.overrideMimeType('text/html; charset=utf-8');
rawFile.open("GET", url, false);
rawFile.onreadystatechange = function (){
if(rawFile.readyState === 4){
if(rawFile.status === 200 || rawFile.status == 0) {
var allText = rawFile.responseText;
var textByLine = allText.split('\n');
for(var i = 0; i < textByLine.length; i++){
if(textByLine[i].trim().length < 1) continue;
var key = textByLine[i].split(',')[0].trim();
var value = textByLine[i].split(',')[1].trim();
ret[key] = value;
}
}
}
};
rawFile.send(null);
console.log(ret);
return ret;
}
===========已编辑
我找到了提示。
当我从文件中读取时,它会将\u 更改为\\u,而当我从文本中读取时,它会保持原样。
即
- 文件版本:
\ud83d\ude03到\\ud83d\\ude03 - 脚本版本:
\ud83d\ude03本身
所以重点是如何防止它将\ 更改为\\。
我还是没有找到答案。
【问题讨论】:
标签: javascript file xmlhttprequest emoji surrogate-pairs