• ベストアンサー

文字リテラルについて

javaの文字リテラルについて教えていただきたいのですが \u1234の様にunicodeの16進数(2バイト) を使用すると思いますが、\uのあとの桁数は、必ず4桁なのでしょうか?1桁もしくは2、3桁もありえますでしょうか? unicodeの16進数について理解していないのでよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.4

> unicodeでたとえ3桁があってもjavaの文字リテラルまたは、 > 文字列リテラルもしくはString 型は \uXXXX 4桁で表示すると > 理解していいのでしょうか? 表示する、というのがよくわかりませんが、とにかく、\uXXXX は4桁で無いとだめということです。 > また\uXXXX 4桁はStringBufferでも使用可でしょうか? 何か \uXXXX の表記法について誤解していらっしゃるようです。 たとえば、ユニコード文字 \u00c0 (Aに点がついた文字)をソースコードに入力しようとしても、ソースファイルがSHIFT-JISでエンコードされている限りは、このようなSHIFT-JISに無い文字は入力できませんね。 そこで、ソースコードに目的の文字を直接入れるのではなく、\u00c0 の形をした「代替表現」を使うことで、「そこにはAに点がついた文字が入力されているとみなしてくれ」と、コンパイラーに伝えるのです。 するとコンパイラーは、「なるほど、Aに点がついた文字をつかうのですね」と、バイトコード生成の時に代替表現である \u00c0 から、本来の文字である「Aに点がついた文字」に変換するのです。 さて、実際にプログラムを実行する時ですが、バイトコード(classファイル)に記憶されている文字は、コンパイルの時点ですでに本来の目的の文字に変換されていますから、\uXXXX のような表現はもうありません。 ですから、String だとか StringBuffer だとか気にする必要はありません。そのような心配は別次元の話なのです。 なお、代替表現と書きましたが、SHIFT-JISにある文字でもユニコード番号さえわかれば \uXXXX の形で表記することもできます。

koron
質問者

お礼

大変勉強になりました。 ありがとうございました。

その他の回答 (4)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.5

Unicode が3桁か4桁か、の問題ではなく、 Java の言語仕様として、\u のうしろは4桁でなければならない、 とされています。 あと、UKYさんも発言されてますが、 コンパイラは、コンパイルするとき、まず最初に \uXXXX という記述を それが示す文字に変換します。 文法の解析などは全てその後です。なので、 > ですから、String だとか StringBuffer だとか気にする必要はありません。 > そのような心配は別次元の話なのです。 のとおりです。

koron
質問者

お礼

そうですね。 4桁で覚えておきます フォローありがとうございました。

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

はい、必ず4桁です。 従って、\u20 のように書くことはできなくて、\u0020 のようにする必要があります。 逆に、u はいくらあってもかまいません。 \u0020 も \uu0020 も \uuu0020 も同じです。 (実際に u をいくつも書いているのを見たことはありませんが) また、\uXXXX の表記法は文字リテラルや文字列リテラルでしか使えないわけではありません。 例えば、次の2文は同じになります。 String str = "Sample"; \u0053\u0074\u0072\u0069\u006e\u0067 str \u003d "Sample"; (\u0053\u0074\u0072\u0069\u006e\u0067 が String に、\u003d が = になります)

koron
質問者

お礼

UKY様 大変詳しい内容で感謝しております。 少し気になったのが、-soh-様の解答で3桁もあるという ことで参考ホームページを拝見いたしました。 すると下記の様にunicodeでは、どうも3桁もあるようでした。 例)基本ローマ字の大文字 ABCDEFGHIJKLMNOPQRSTUVWXYZ は U+0041-005A unicodeでたとえ3桁があってもjavaの文字リテラルまたは、文字列リテラル もしくはString 型は \uXXXX 4桁で表示すると理解していいのでしょうか? また\uXXXX 4桁はStringBufferでも使用可でしょうか? よろしくお願い申し上げます。

  • -soh-
  • ベストアンサー率27% (55/201)
回答No.2

こんにちわ、sohです 3桁も確かありましたよ http://www-6.ibm.com/jp/developerworks/unicode/010928/j_u-tech2-index.html って、あ、もしかして\uXXXX で4桁って表現でした? だとするとunicodeマップが・・・・ あぅ、ごめん、すでに消えてたや(とほほ

koron
質問者

お礼

-soh-様 ホームページ情報ありがとうございました。 早速拝見させていただきました。 unicodeは3桁もあるようですね。 ありがとうございした。

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

そうですね、Unicodeだったら4桁ですね。 ASCIIコード番号でしたら。。。 char c=(char)65; とか出来ますけど。

koron
質問者

お礼

アドバイスありがとうございます。 ASCIIコード番号について気になったのですが javaでASCIIコード番号を使用するときはどのように使用するのでしょうか 参考サンプル等教えていただければ幸いです。 よろしくお願いいたします。