3

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 でサロゲート文字列を表現するにはどうすればよいですか? (サードパーティのライブラリは使いたくないのですが)

参考までに、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自身

に変わるの\をどう防ぐかがポイントです\\

私はまだ答えを見つけていません。

4

1 に答える 1