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
自身
に変わるの\
をどう防ぐかがポイントです\\
。
私はまだ答えを見つけていません。