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

javaは内部では文字をユニコードとして扱うとは、
どういう事でしょうか?

例えば、javaのブログラムをwindows上で作ったとして、

「こんにちわ」と出力させるプログラムを作ったとすると、

public class Hello{
public static void main(String[] args) {
System.out.println("こんにちわ");
}
}

となりますよね、この時、このjavaのソースファイルを、
ユニコードとして保存して、コンパイル、実行しないと、
正常に動かないという事でしょうか?

つまり、ソースをシフトJISで保存してJAVAでコンパイルをしようとすると、ソースコード中の文字をユニコードとして扱うため、
文字化けして、コンパイラは一体何の事か分からずエラーみたいな感じになるのでしょうか?(それとも自動で文字コードをユニコードに変換してくれるのかな?)


要するに、「内部文字コード」という言葉が何を指しているのかが分からないですが、よろしくお願いします。

A 回答 (1件)

 かなりいい加減に言うと、Stringクラス、StringBufferクラスなどが保持する文字列がUNICODEだと言う意味だ。



 残念ながら、この辺の話は「エンコーディング」と「文字セット(charset)」と「コードページ」と「グリフ」の意味を知らないと多分理解できんと思う。

 ここでは、そーゆー難しい話は全部省いて、UNICODEとShiftJISとEUC-JPとlatin-1に限定し、かつかなり手順をはしょって説明する。
 たとえばWindows上で、標準入力(System.in)から日本語を入力して標準出力(System.out)へ吐き出す事を考えよう。
 「亜」という文字は、CP932では889F(HEX)、UNICODEではU+4E9Cと表現される。あなたがキーボードからIMEを使ってあを変換し「亜」にする時、メモリ上の値は889F(HEX)だ。それをJavaプログラムに渡して、System.inから取り込んだ時にJava VMのデフォルトエンコーディングで4E9C(HEX)に変換している(この辺から内部エンコード)。
 ソースプログラム中にif("亜".equals(strInput))なんてあれば、それは「実行時には」4E9C(HEX)として扱われているのだな。
 (このあたりから内部→外部エンコード)System.outで吐き出す時に4E9C(HEX)だとWindows上では「亜」を吐き出せないので889F(HEX)に変換している。

 大雑把な説明だが、これが内部エンコーディングがUNICODEだと言われるものだ。
    • good
    • 0
この回答へのお礼

現在の知識では分からない部分が多数ありましたので、「文字コード超研究」という本を読んでからもう一度anmochi様からご回答していただいた内容を見ると、良く分かりました。内部で文字を扱う時にはユニコードへ、外部へ出力する時にCP932(shift-jisを拡張)へと変換するのですね。とてもわかりやすく解説していただいてありがとうございました。

お礼日時:2006/12/02 17:18

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