文字列とUTF16と16進数について調べているときに作った相互変換機能です
いずれかの入力欄に変換したい値を入れると他の2つの値が自動で表示されます
例:
文字列に「𠮟」と入力するか
UTF16の1つめに「55362」2つめに「57247」と入力するか
16進数の1つめに「d842」2つめに「df9f」と入力すると
以下のように他の値が自動で埋まる
※ 𠮟 は常用漢字の中で唯一のサロゲートペア
HTML Serviceで作ってみる
コード.gsfunction doGet() { return HtmlService.createHtmlOutputFromFile("index"); } | 意訳この機能がやること 指定したHTMLファイルを表示する |
index.html<!DOCTYPE html> <html> <body> <table> <tbody> <tr> <td> <label>文字列</label> </td> <td> <input type="text" id="str"> </td> </tr> <tr> <td> <label>UTF16</label> </td> <td> <input type="text" id="utf16_1"> </td> <td> <input type="text" id="utf16_2"> </td> </tr> <tr> <td> <label>16進数</label> </td> <td> <input type="text" id="hexadecimal_1"> </td> <td> <input type="text" id="hexadecimal_2"> </td> </tr> </tbody> </table> <script> var str = document.getElementById("str"); var utf16_1 = document.getElementById("utf16_1"); var utf16_2 = document.getElementById("utf16_2"); var hexadecimal_1 = document.getElementById("hexadecimal_1"); var hexadecimal_2 = document.getElementById("hexadecimal_2"); str.onkeyup = keyup; utf16_1.onkeyup = keyup; utf16_2.onkeyup = keyup; hexadecimal_1.onkeyup = keyup; hexadecimal_2.onkeyup = keyup; function keyup() { switch (this.id) { case "str": get_utf16(); get_hexadecimal(); break; case "utf16_1": case "utf16_2": get_hexadecimal(); get_str(); break; case "hexadecimal_1": case "hexadecimal_2": get_str(); get_utf16(); break; } } function get_str() { if (hexadecimal_2.value == "") { str.value = String.fromCharCode("0x" + hexadecimal_1.value); } else { str.value = String.fromCharCode("0x" + hexadecimal_1.value) + String.fromCharCode("0x" + hexadecimal_2.value); } } function get_utf16() { if (str.value.length == 2) { utf16_1.value = str.value.charCodeAt(0); utf16_2.value = str.value.charCodeAt(1); } else { utf16_1.value = str.value.charCodeAt(0); utf16_2.value = ""; } } function get_hexadecimal() { if (utf16_2.value == "") { hexadecimal_1.value = parseInt(utf16_1.value).toString(16); hexadecimal_2.value = ""; } else { hexadecimal_1.value = parseInt(utf16_1.value).toString(16); hexadecimal_2.value = parseInt(utf16_2.value).toString(16); } } </script> </body> </html> | 意訳これはHTML5文書です 文字列のラベル そのテキストボックス UTF16のラベル utf16_1のテキストボックス utf16_2のテキストボックス 16進数のラベル hexadecimal_1のテキストボックス hexadecimal_2のテキストボックス idがstrの要素を取得する idがutf16_1の要素を取得する idがutf16_2の要素を取得する idがhexadecimal_1の要素を取得する idがhexadecimal_2の要素を取得する idがstrの要素でキーが上がったらkeyupを実行する idがutf16_1の要素でキーが上がったらkeyupを実行する idがutf16_2の要素でキーが上がったらkeyupを実行する idがhexadecimal_1の要素でキーが上がったらkeyupを実行する idがhexadecimal_2の要素でキーが上がったらkeyupを実行する この機能がやること idによって処理を分ける idがstrなら get_utf16()と get_hexadecimal()を実行する idがutf16_1の場合 idがutf16_2の場合 get_hexadecimal()と get_str()を実行する idがhexadecimal_1の場合 idがhexadecimal_2の場合 get_str()と get_utf16()を実行する この機能がやること もしhexadecimal_2の値が空なら strの値はhexadecimal_1の頭に0xを付けて文字列にした値を入れる 空じゃなければ strの値はhexadecimal_1の頭に0xを付けて文字列にした値とhexadecimal_2の頭に0xを付けて文字列にした値を足して入れる この機能がやること もしstrの値が2なら(サロゲートペアなら) utf16_1の値はstrの値の前半をUTF16にした値を入れる utf16_2の値はstrの値の後半をUTF16にした値を入れる それ以外なら utf16_1の値はstrの値をUTF16にした値を入れる utf16_2の値は空にする この機能がやること もしutf16_2の値が空なら(サロゲートペアじゃないなら) hexadecimal_1の値はutf16_1の値を16進数にした値を入れる hexadecimal_2の値は空にする サロゲートペアなら hexadecimal_1の値はutf16_1の値を16進数にした値を入れる hexadecimal_2の値はutf16_2の値を16進数にした値を入れる |
参考
String.fromCharCode()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
Number.prototype.toString()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toString
String.prototype.charCodeAt()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
parseInt()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/parseInt
String.fromCharCode()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
Number.prototype.toString()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toString
String.prototype.charCodeAt()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
parseInt()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/parseInt