|
|
| (同じ利用者による、間の5版が非表示) |
| 1行目: |
1行目: |
| サロゲートペアのコードポイント表記
| |
|
| |
|
| <pre>
| |
| Surrogate Pair : Unicode UCS-4 (4バイト文字)
| |
|
| |
|
| |
| サロゲートペアのコードポイント (16面 x 65536字)
| |
| 第1面 SMP 追加多言語面 U+10000 - U+1FFFF
| |
| 第2面 SIP 追加漢字面 U+20000 - U+2FFFF
| |
| …
| |
| 第15面 私用面 U+F0000 - U+FFFFF
| |
| 第16面 私用面 U+100000 - U+10FFFF
| |
| .. 16 x 256 x 256 = 16 x 65536 = 1,048,576字
| |
|
| |
| サロゲートペアの内部コード (4バイトの16進数 上位1024字 + 下位1024字)
| |
| 上位 0xD800 - 0xDBFF 0x400 (1024字) D8 D9 DA DB 0x100 (256字) x 4
| |
| 下位 0xDC00 - 0xDFFF 0x400 (1024字) DC DD DE DF 0x100 (256字) x 4
| |
| .. 1024 x 1024 = 1,048,576字
| |
|
| |
|
| |
| サロゲートペア (UCS-4 4バイト文字) 1,048,576字
| |
| \uD800\uDC00 (U+10000) - \uDBFF\uDFFF (U+10FFFF)
| |
|
| |
| サロゲートペアの全文字を検索
| |
| [\x{10000}-\x{10FFFF}]
| |
|
| |
|
| |
| 鬼車では、サロゲートペアの U+1F017 \uD83C\uDC17 を \x{1f017} のよう
| |
| なコードポイント、または文字集合の文字で指定します。
| |
|
| |
| ※(ご注意) Mery 1.1.2.2840 に添付の onig.dll では、この \x{1f017} の
| |
| 検索はできません。コード表記ではない文字集合は使えます。
| |
|
| |
| 通常の UCS-2 は、たとえば \u4E0A 上 は、\x{4e0a} または \x0a\x4e
| |
| または、文字集合の文字で検索します。
| |
|
| |
| </pre>
| |
|
| |
| サロゲートペア コードポイント表記 (U+1HHHH) と 内部コード表記 (\uHHHH\uHHHH) の置換
| |
|
| |
| 内部コードは JavaScript 表記。鬼車では \x{HHHH} の表記になります。
| |
|
| |
| <source lang="javascript">
| |
| // - ------------------------ --------------------------------------------------
| |
| // サロゲートペア_内部コードをコードポイントに.js
| |
| //
| |
| // サロゲートペアの表記置換(1字の表記を選択して実行)
| |
| // 内部コード表記 (\uHHHH\uHHHH) をコードポイント表記 (U+1HHHH) に置換
| |
| //
| |
| // revised inuuik 2012-09-11
| |
| // - ------------------------ --------------------------------------------------
| |
| var s = document.selection;
| |
| if (!s.IsEmpty) {
| |
| var t2 = s.Text;
| |
| var re = /\\u(D[89AB][0-9A-F]{2})\\u(D[C-F][0-9A-F]{2})/ig;
| |
| if (re.test(t2)) {
| |
| s.Text = t2.replace(re, function(str, p1, p2, offset, s) {
| |
| var ucp = "", pre = "U+";
| |
| if (p1 === undefined || p2 === undefined) { return ucp; }
| |
| ucp = ((((parseInt(p1, 16) & 0x000003ff) << 10) | (parseInt(p2, 16) & 0x000003ff)) + 0x00010000).toString(16).toUpperCase();
| |
| return pre + ucp;
| |
| });
| |
| }
| |
| }
| |
| // - ------------------------ --------------------------------------------------
| |
| </source>
| |
|
| |
| <source lang="javascript">
| |
| // - ------------------------ --------------------------------------------------
| |
| // サロゲートペア_コードポイントを内部コードに.js
| |
| //
| |
| // サロゲートペアの表記置換(1字の表記を選択して実行)
| |
| // コードポイント表記 (U+1HHHH) を内部コード表記 (\uHHHH\uHHHH) に置換
| |
| //
| |
| // revised inuuik 2012-09-11
| |
| // - ------------------------ --------------------------------------------------
| |
| var s = document.selection;
| |
| if (!s.IsEmpty) {
| |
| var t2 = s.Text;
| |
| var re = /(?:U\+)?(1?[0-9A-F][0-9A-F]{4})/ig;
| |
| if (re.test(t2)) {
| |
| s.Text = t2.replace(re, function(str, p1, offset, s) {
| |
| var spu = "", spl = "", pre = "\\u", ucp_i;
| |
| if (p1 === undefined) { return spu; }
| |
| spu = (0x0000d800 | (((ucp_i = parseInt(p1, 16)) - 0x00010000) >> 10)).toString(16).toUpperCase();
| |
| spl = (0x0000dc00 | (ucp_i & 0x000003ff)).toString(16).toUpperCase();
| |
| return pre + spu + pre + spl;
| |
| });
| |
| }
| |
| }
| |
| // - ------------------------ --------------------------------------------------
| |
| </source>
| |