指定した文字を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を文字列にして 結果の配列を返す |
実行結果

