「3.3. Unicodeエスケープ」の編集履歴(バックアップ)一覧はこちら

3.3. Unicodeエスケープ」(2012/09/04 (火) 13:14:01) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

[[3. 字句構造]] **[[3.1. Unicode]] **[[3.2. 字句変換]] **3.3. Unicodeエスケープ Javaプログラミング言語のコンパイラー(以下、Javaコンパイラー)は最初に入力中のUnicodeエスケープ(unicode escape)を認識し、&tt(){\u}で始まり4桁の16進数が続くASCII文字列をその16進数に対応するUTF-16符号化コード単位([[3.1.>3.1. Unicode]])に変換します。これ以外の文字は一切変更しません。補助文字についてはサロゲートペアで表す必要があります。この変換ステップの結果、Unicode入力文字の列となります。 #divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){ &i(){UnicodeInputCharacter}:   &i(){UnicodeEscape}   &i(){RawInputCharacter} &i(){UnicodeEscape}:   &tt(){\} &i(){UnicodeMarker} &i(){HexDigit} &i(){HexDigit} &i(){HexDigit} &i(){HexDigit} &i(){UnicodeMarker}:   &tt(){u}   &i(){UnicodeMarker} &tt(){u} &i(){RawInputCharacter}:   any Unicode character &i(){HexDigit}: one of   &tt(){0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F} } &i(){&small(){&tt(){\}も&tt(){u}も16進数も全てASCII文字です。}} 上記文法処理に加えて入力処理では、未加工入力文字のバックスラッシュ\がUnicodeエスケープの前に他の文字を挟まず何文字連続するか確認します。連続文字数(Unicodeエスケープの分を除いた)が偶数の場合はUnicodeエスケープとして変換され、奇数の場合はUnicodeエスケープは変換されません。 #divstyle(background-color:#f0f0ff;border:1px solid black;padding 4px){ &i(){&small(){例えば、未加工入力"&tt(){\\u2297=\u2297}"は計11文字"&tt(){\ \ u 2 2 9 7 = ⊗}"になります(&tt(){\u2297}は文字⊗のUnicode符号化です)。}} } &tt(){\}の後に&tt(){u}がない場合、&i(){RawInputCharacter}として扱われ、エスケープ処理されたUnicodeストリームの一部として残ります。 ''\の後に1文字以上のuが続いた後に4文字の16進数がない場合、コンパイルエラーとなります。'' Unicodeエスケープで変換されたキャラクターは再度Unicodeエスケープの候補からはずされます。 #divstyle(background-color:#f0f0ff;border:1px solid black;padding 4px){ &i(){&small(){例えば、未加工入力&tt(){\u005cu005a}は&tt(){005c}は\のUnicode値であるため&tt(){\ u 0 0 5 a}の計6文字に変換されます。Unicode文字@tt(){005a}である文字Zには変換されません。@tt(){005c}から変換された\は将来のUnicodeエスケープの開始文字とは解釈されません。}} } Javaプログラミング言語はUnicodeで書かれたプログラムをASCIIベースのツールで処理することができるようにASCIIに変換する標準的な手段を提供しています。変換はASCIIへ変換するプログラムのソーステキスト中のUnicodeエスケープにuを足す処理も含まれています。例えば、&tt(){\uxxxx}は&tt(){\uuxxxx}に変換します。一方で同時にソーステキスト中の非ASCII文字は単一のuを用いたUnicodeエスケープに変換します。 この変換されたバージョンはJavaコンパイラーに同様に入力可能で正確に同じプログラムを表しています。後でこのASCII形式は元と全く同じUnicodeソースに戻すことができます。この時、個々のエスケープシーケンスは、複数のuがつくものはuの数が1つ減らされたエスケープシーケンスに変換されるとともに、単一のuのものは対応する単一のUnicode文字に変換されます。 &i(){&small(){JavaコンパイラーはUnicode文字を出力する際に適切なフォントが利用できない場合、&tt(){\uxxxx}記法を出力形式として使います。}} **[[3.4. 行終端子]] **[[3.5. 入力要素とトークン]] **[[3.6. 空白]] **[[3.7. コメント]] **[[3.8. 識別子]] **[[3.9. キーワード]] **[[3.10. リテラル]] **[[3.11. 分離子]] **[[3.12. 演算子]]
[[3. 字句構造]] **[[3.1. Unicode]] **[[3.2. 字句変換]] **3.3. Unicodeエスケープ Javaプログラミング言語のコンパイラー(以下、Javaコンパイラー)は最初に入力中のUnicodeエスケープ(unicode escape)を認識し、&tt(){\u}で始まり4桁の16進数が続くASCII文字列をその16進数に対応するUTF-16符号化コード単位([[3.1.>3.1. Unicode]])に変換します。これ以外の文字は一切変更しません。補助文字についてはサロゲートペアで表す必要があります。この変換ステップの結果、Unicode入力文字の列となります。 #divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){ &i(){UnicodeInputCharacter}:   &i(){UnicodeEscape}   &i(){RawInputCharacter} &i(){UnicodeEscape}:   &tt(){\} &i(){UnicodeMarker} &i(){HexDigit} &i(){HexDigit} &i(){HexDigit} &i(){HexDigit} &i(){UnicodeMarker}:   &tt(){u}   &i(){UnicodeMarker} &tt(){u} &i(){RawInputCharacter}:   any Unicode character &i(){HexDigit}: one of   &tt(){0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F} } &i(){&small(){&tt(){\}も&tt(){u}も16進数も全てASCII文字です。}} 上記文法処理に加えて入力処理では、未加工入力文字のバックスラッシュ\がUnicodeエスケープの前に他の文字を挟まず何文字連続するか確認します。連続文字数(Unicodeエスケープの分を除いた)が偶数の場合はUnicodeエスケープとして変換され、奇数の場合はUnicodeエスケープは変換されません。 #divstyle(background-color:#f0f0ff;border:1px solid black;padding 4px){ &i(){&small(){例えば、未加工入力"&tt(){\\u2297=\u2297}"は計11文字"&tt(){\ \ u 2 2 9 7 = ⊗}"になります(&tt(){\u2297}は文字⊗のUnicode符号化です)。}} } &tt(){\}の後に&tt(){u}がない場合、&i(){RawInputCharacter}として扱われ、エスケープ処理されたUnicodeストリームの一部として残ります。 ''\の後に1文字以上のuが続いた後に4文字の16進数がない場合、コンパイルエラーとなります。'' Unicodeエスケープで変換されたキャラクターは以降のUnicodeエスケープの候補からはずされます。 #divstyle(background-color:#f0f0ff;border:1px solid black;padding 4px){ &i(){&small(){例えば、未加工入力&tt(){\u005cu005a}は&tt(){005c}は\のUnicode値であるため&tt(){\ u 0 0 5 a}の計6文字に変換されます。Unicode文字&tt(){005a}である文字Zには変換されません。&tt(){005c}から変換された\は将来のUnicodeエスケープの開始文字とは解釈されません。}} } Javaプログラミング言語はUnicodeで書かれたプログラムをASCIIベースのツールで処理することができるようにASCIIに変換する標準的な手段を提供しています。変換はASCIIへ変換するプログラムのソーステキスト中のUnicodeエスケープにuを足す処理も含まれています。例えば、&tt(){\uxxxx}は&tt(){\uuxxxx}に変換します。一方で同時にソーステキスト中の非ASCII文字は単一のuを用いたUnicodeエスケープに変換します。 この変換されたバージョンはJavaコンパイラーに同様に入力可能で正確に同じプログラムを表しています。後でこのASCII形式は元と全く同じUnicodeソースに戻すことができます。この時、個々のエスケープシーケンスは、複数のuがつくものはuの数が1つ減らされたエスケープシーケンスに変換されるとともに、単一のuのものは対応する単一のUnicode文字に変換されます。 &i(){&small(){JavaコンパイラーはUnicode文字を出力する際に適切なフォントが利用できない場合、&tt(){\uxxxx}記法を出力形式として使います。}} **[[3.4. 行終端子]] **[[3.5. 入力要素とトークン]] **[[3.6. 空白]] **[[3.7. コメント]] **[[3.8. 識別子]] **[[3.9. キーワード]] **[[3.10. リテラル]] **[[3.11. 分離子]] **[[3.12. 演算子]]

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー