[19] Unicode符号位置を \uHHHH
のようにエスケープする方法が色々な場面で使われます。
[20] U+0000
-U+FFFF
の符号位置は、
\u
の後に4桁のASCII十六進数字で符号位置を表すことによって表現できます。
[23] U+10000
以上の符号位置の表現方法は、
いくつかの流儀があります。
[24] 古くから使われている方法では、 \U
の後に8桁の十六進数字で符号位置を指定します。
この方法は UCS の31ビットすべての符号位置を表現できます。
(BMP をこの方法でも表現できるかどうかは、文脈によります。)
[25] 場合によっては、 \U
の後に6桁の十六進数字で符号位置を指定します。
この方法は Unicode の21ビットすべての符号位置を表現できます。
(BMP をこの方法でも表現できるかどうかは、文脈によります。)
[26] この2つの方法は、混在させることができません。
[27] UTF-16 を使う環境では、サロゲートペアに相当する2つの符号位置の
\uHHHH
形で非 BMP 符号位置を表現する場合があります。
[28] エラー処理の方法は、文脈によります。困ったことに、明確に規定していない場合もあります。
[29] 少なくても次のようなエラー状況を想定する必要があります。
[37] Unicode正規表現においては、 十六進記法の実装が要求されています。 >>36
[38]
十六進記法は、
16進数表現によって任意のUnicode符号点
[ U+0000
, U+10FFFF
]
を指定できなければなりません。
>>36 RL1.1
[39] 特定の構文の実装までは要求されておらず、既存の正規表現構文の自然な拡張が想定されているようです。 しかしながら、 符号点を16進数で表したものでなくてはならず、 UTF-8 バイト列や UTF-16符号単位の16進数表現ではこの要件を満たせません >>36。
[41] 記法例として、次のような構文が定められています。 >>36
\u
の後に4つのASCII十六進数字\u{
の後に符号点の並びの後に }
10
の後に4個の
ASCII十六進数字SP
で区切ったもの\uHHHH
(Java)[1] Java の \u 符号化 (UnicodeEscape) http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100850 http://java.sun.com/docs/books/jls/first_edition/html/3.doc.html#100850 http://www.y-adagio.com/public/standards/tr_javalang2/lexical.doc.html http://www.y-adagio.com/public/standards/tr_javalang/3.doc.htm
[4] Mozilla でも使われていて、 x-u-escaped
と呼ばれている。
[5] U+10000 〜 をどう表現するのかは不明。
native2ascii
というのが入ってます。これを使って変換します。\uu4E00
みたいな書き方が可能 (意味は >>1 参照。) なの (は Java 以外の実装、例えば Mozilla とかが対応しているのか) と、 >>5 の疑問があるのですが、なんせ "\u" なんてどこの検索円陣にも掛からないし、さぱーりわからない。\x
などのオクテット表現方法の延長として \uHHHH
が使われることがよくあります。U+FFFF
より大きいのを表現する方法は、 \UHHHHHH
を使う方法と \UHHHHHHHH
を使う方法があります。 (後者がお勧め。) ほかにサロゲートを使ってがんばる処理系もあるかもしれませんが、萎え萎え。[10] >>5-9 Java では \UHHHHHH
とするようです。
Supplementary Characters in the Java Platform http://java.sun.com/developer/technicalArticles/Intl/Supplementary/
\uHHHH
(JavaScript)[11] JavaScript の正規表現で \u の後に十六進数が4桁続かない場合、 ES3 によると構文エラーのはずですが、どのブラウザでも、 \ がなかった場合と同じように処理されます。
\u'HHHH'
(RFC 5137)[12] RFC 5137 (BCP 137) は、 Unicode 文字を escape するための方法で勧められるものを2つ挙げています。 そのうちの1つが ¥u'HHHH' のような書式です。
EmbeddedUnicodeChar = %x5C.75.27 4*6HEXDIG %x27 ; starting with lowercase "\u" and "'" and ending with "'". ; Note that the encodings are considered to be abstractions ; for the relevant characters, not designations of specific ; octets.
HEXDIG = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / "A" / "B" / "C" / "D" / "E" / "F"
RFC 5234のABNF を用いているので、十六進数の大文字・小文字は区別しません。 (「\u」の部分は小文字でなければなりません。)
[14] RFC 5137 - ASCII Escaping of Unicode Characters ( 版) https://tools.ietf.org/html/rfc5137#section-5.1
[15] draft-klensin-encoded-word-type-u-00 - The "U" Encoding for Encoded-Words in Email ( 版) https://tools.ietf.org/html/draft-klensin-encoded-word-type-u-00
[16] この方法が IETF 以外で使われるのは見たことがありません。 IETF は世間一般で広く普及した形式を奇妙にアレンジするのが好きなようです。
[49] 本の虫: C++0xにおけるユニバーサルキャラクタ名(universal character name)について, , https://cpplover.blogspot.com/2008/12/c0xuniversal-character-name.html
[50] Universal Character Name – EmEditor (テキストエディタ), https://jp.emeditor.com/text-editor-features/more-features/universal-character-name/
[51] D.1.4 Universal Character Names (UCN) (Sun Studio 12 Update 1: C User's Guide), https://docs.oracle.com/cd/E19205-01/820-7598/bjazf/index.html
[52] String and character literals (C++) | Microsoft Learn, TylerMSFT, https://learn.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?view=msvc-170#bkmk_UCN
[18] Unicode の文字列をソースコードに埋め込む方法 - いやなブログ (2007-09-09 19:34:15 +09:00
版) http://0xcc.net/blog/archives/000183.html
[35] rfc3862, https://datatracker.ietf.org/doc/html/rfc3862#section-2.3