【问题标题】:emoji surrogate string with Javascript. How to parse?带有 Javascript 的表情符号代理字符串。如何解析?
【发布时间】: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


    【解决方案1】:

    找到了我猜的答案。

    参考以下链接: How do I decode a string with escaped unicode?

    function parseUnicode(str){
        var r = /\\u([\d\w]{4})/gi;
        str = str.replace(r, function (match, grp) {
            return String.fromCharCode(parseInt(grp, 16)); } );
        return str;
    }
    

    作为参考,js字符串值可以与来自文件的字符串不同。我做了一个函数来检查每个字符,结果是不同的。

    function charAnalyst(str){
    
        var result = '';
        for(var i = 0; i < str.length; i++){
            var aChar = str.charAt(i);
            result += aChar;
            console.log(aChar);
        }
        console.log(result);
    }
    

    我希望这会节省您的时间:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      相关资源
      最近更新 更多