重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (5件)

> 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 の形で表記することもできます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/28 10:39

Unicode が3桁か4桁か、の問題ではなく、


Java の言語仕様として、\u のうしろは4桁でなければならない、
とされています。

あと、UKYさんも発言されてますが、
コンパイラは、コンパイルするとき、まず最初に \uXXXX という記述を
それが示す文字に変換します。
文法の解析などは全てその後です。なので、

> ですから、String だとか StringBuffer だとか気にする必要はありません。
> そのような心配は別次元の話なのです。

のとおりです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/28 10:40

はい、必ず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 が = になります)
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/27 12:33

こんにちわ、sohです



3桁も確かありましたよ
http://www-6.ibm.com/jp/developerworks/unicode/0 …

って、あ、もしかして\uXXXX
で4桁って表現でした?
だとするとunicodeマップが・・・・
あぅ、ごめん、すでに消えてたや(とほほ
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/27 12:35

そうですね、Unicodeだったら4桁ですね。


ASCIIコード番号でしたら。。。

char c=(char)65;

とか出来ますけど。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/27 12:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!