![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
javaは内部では文字をユニコードとして扱うとは、
どういう事でしょうか?
例えば、javaのブログラムをwindows上で作ったとして、
「こんにちわ」と出力させるプログラムを作ったとすると、
public class Hello{
public static void main(String[] args) {
System.out.println("こんにちわ");
}
}
となりますよね、この時、このjavaのソースファイルを、
ユニコードとして保存して、コンパイル、実行しないと、
正常に動かないという事でしょうか?
つまり、ソースをシフトJISで保存してJAVAでコンパイルをしようとすると、ソースコード中の文字をユニコードとして扱うため、
文字化けして、コンパイラは一体何の事か分からずエラーみたいな感じになるのでしょうか?(それとも自動で文字コードをユニコードに変換してくれるのかな?)
要するに、「内部文字コード」という言葉が何を指しているのかが分からないですが、よろしくお願いします。
No.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を拡張)へと変換するのですね。とてもわかりやすく解説していただいてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
VB 6 を VS 2012に変換するには?
-
MATLABのMATファイル をC言語...
-
分を時間に変換するプログラム
-
MATLAB/simulinkでのD/A変換の仕方
-
Win32APIのFTPクライアントにつ...
-
10進数をBCDに変換する方法
-
C++からCへのソース変換について
-
BCBプロジェクトをVCに移植
-
COMP-3
-
VB.NETからJavaに変換するツー...
-
UTF8→ShiftJISに変換したいです!
-
vb.netの型変換について
-
cv::Matconst→CvArr* 変換
-
ユニコード文字の変換について
-
家電製品の電力周波数を変える機械
-
VC++2005で、CString型に16進...
-
VB6のAdressOfをVB.NETに変換し...
-
bitmapクラスをiconクラスに変...
-
中国語が文字コード変換で、一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
3のつく数字と3の倍数のみを表...
-
10進数をBCDに変換する方法
-
bmp→jpgに、jpg→bmpに
-
エクセルVBAの自動変換機能?
-
アセンブラ言語の数字を数値に...
-
なぜ通信には16進数文字列が使...
-
SJIS⇔UTF-8の文字コード...
-
C++からCへのソース変換について
-
分を時間に変換するプログラム
-
UTF8→ShiftJISに変換したいです!
-
家電製品の電力周波数を変える機械
-
マンセル⇔XYZ,RGB変換式或いは...
-
VB.NETをJavaに変換するツール...
-
画像ファイル変換(Tiff→PDF)
-
PHPで、日本語からアルファベッ...
-
魚眼レンズの画像処理
-
C#で漢字→ローマ字を変換
-
StrConvの使い方について教えて...
おすすめ情報