指定した文字を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を付けた値を文字列にして ログに出す |
実行結果
処理を分けて書いてみると
コード.gsfunction 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を文字列にして 結果の配列を返す |
実行結果