- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:内部文字コードとは?)
javaの内部文字コードとは?
このQ&Aのポイント
- javaの内部文字コードとは、javaが文字をユニコードとして扱うことを指します。
- 例えば、javaソースファイルをシフトJISで保存しようとすると、文字化けが発生しコンパイルエラーになります。
- そのため、javaのソースファイルはユニコードとして保存してコンパイルする必要があります。
- みんなの回答 (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だと言われるものだ。
お礼
現在の知識では分からない部分が多数ありましたので、「文字コード超研究」という本を読んでからもう一度anmochi様からご回答していただいた内容を見ると、良く分かりました。内部で文字を扱う時にはユニコードへ、外部へ出力する時にCP932(shift-jisを拡張)へと変換するのですね。とてもわかりやすく解説していただいてありがとうございました。