LANG SELRCT

コードを書く場所についてはこちら

2018年2月5日月曜日

文字列→UTF16→16進数→文字列に変換する


指定した文字をUTF16にしてそれを16進数にして再び文字に戻すコードを書いたので備忘録として残しておきます

常用漢字の中でサロゲートペアである 𠮟 を例にしました



コード.gs
function get_log() {
  var str = "𠮟";
  var utf16 = [];
  var hexadecimal = [];
  var char = "";
  for (var i = 0; i < str.length; i++) {
    utf16.push(str.charCodeAt(i));
    hexadecimal.push(utf16[i].toString(16)); 
    char += String.fromCharCode("0x" + hexadecimal[i]);
  }
  Logger.log([str.length, utf16, hexadecimal, char])
}
意訳
この機能がやること
文字を指定して
utf16の結果を入れる配列を用意して
16進数の結果を入れる配列を用意して
文字列の結果を入れる入れ物を用意して
文字の数(サロゲートペアなら2)以下を繰り返す
文字をUTF16にした値をutf16に追加する
それを16進数にした値をhexadecimalに追加する
それに0xを付けた値を文字列にして

ログに出す



実行結果




処理を分けて書いてみると

コード.gs
function get_log() {
  var str = "𠮟";
  var utf16 = get_utf16(str);
  var hexadecimal = get_hexadecimal(utf16);
  var char = get_char(hexadecimal);
  Logger.log([str, utf16, hexadecimal, char])
}

function get_utf16(str){
  var utf16 = [];
  for(var i = 0; i < str.length; i++){
    utf16.push(str.charCodeAt(i));
  }
  return utf16;
}
 
function get_hexadecimal(utf16){
  var hexadecimal = [];
  for(var i = 0; i < utf16.length; i++){
    hexadecimal.push("0x" + utf16[i].toString(16));
  }
  return hexadecimal;
}

function get_char(hexadecimal){
  var char = "";
  for(var i = 0; i < hexadecimal.length; i++){ 
    char += String.fromCharCode(hexadecimal[i]);
  }
  return char;
}
意訳
この機能がやること
文字列を指定して
それをUTF-16にして
それを16進数にして
それを文字列にして
それらをすべてログに出す


この機能がやること
結果を入れる配列を用意して
受け取った文字列の数だけ以下を繰り返す
文字列をひとつずつUTF-16にして結果の配列に追加して

結果の配列を返す


この機能がやること
結果を入れる配列を用意して
受け取ったUTF-16の数だけ以下を繰り返す
UTF-16を16進数にして0xを付けて結果の配列に入れる

結果の配列を返す


この機能がやること
結果を入れる空の入れ物を用意して
受け取ったhexadecimalの数だけ以下を繰り返す
hexadecimalを文字列にして

結果の配列を返す



実行結果