JAVAをコンパイルすると日本語が文字化けしてしまいます。。。
- 評価
- クリップ 0
- VIEW 21K+
前提・実現したいこと
JAVAの勉強を始めました。
本当に始めたところで初心者ですが、よろしくお願いします。
つくったJAVAファイルをコマンドプロンプトでコンパイルするとエラーがでてしまい困っています。
知恵をお授けください。
発生している問題・エラーメッセージ
C:\Users\●●●\Desktop\3autumn>javac fruit.java
fruit.java:3: エラー: この文字は、エンコーディングMS932にマ ップできません
String apple = " 繧翫s縺? ";
^
fruit.java:6: エラー: この文字は、エンコーディングMS932にマ ップできません
String fruit = apple + a + " 縺? ";
^
エラー2個
該当のソースコード
class Fruit {
public static void main(String[] args); {
String apple = " りんご ";
int a = 3;
String fruit = apple + a + " こ ";
System.out.println(fruit);
}
}
```
試したこと
コマンドプロンプトの文字コードは932Sjisでしたので、フォントから"MS ゴシック"を選択、文字コードをchcp65001でUTF8に変更しました。
実行結果は以下の通りです。
C:\Users\●●●\Desktop\3autumn>javac fruit.java
fruit.java:3: G[: ́̕AGR[fBOMS932Ƀ}bvł܂
String apple = " りん? ";
^
fruit.java:6: G[: ́̕AGR[fBOMS932Ƀ}bvł܂
String fruit = apple + a + " ? ";
^
G[2
別の方法も試してみました。結果は以下の通りです。
C:\Users\●●●\Desktop\3autumn>javac -encoding UTF-8 fruit.java
fruit.java:2: エラー: メソッド本体がないか、abstractとして宣言されています
public static void main(String[] args); {
^
エラー1個
補足情報(言語/FW/ツール等のバージョンなど)
OSはwindows10(64bit)
エディタはSublimeText3
コンパイラはコマンドプロンプト
JDK1.8.0
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
文字化けの原因
元のソースコードはUTF-8(BOMなし)で作成したのだと思います。LinuxやMacですとそれが自然なのですが、残念ながらWindowsではそれは混乱の元になります。ご存知のようにデフォルトの文字セットがCP932(Microsoft ShiftJIS)だからです。
コマンドプロンプトでコンパイル・実行する場合以下のようにしないといけません。
(1) ソースコードをCP932(Microsoft ShiftJIS)で書くなら
chcp 932
javac ソースファイル
java クラス名
でコンパイル・実行をする
(2) ソースコードをUTF-8で書くなら
・BOMを付加しないテキストエディタのみを使う(つまりメモ帳はNG)
chcp 932
javac -encoding UTF-8 ソースファイル
java クラス名
でコンパイル・実行をする。しかしこれだとtype ソースファイル名
とすると当然ながら文字化けします。
(3) ソースコードをUTF-8で書き、実行環境もUTF-8にするなら
・BOMを付加しないテキストエディタのみを使う(メモ帳はNG)
chcp 65001
javac -J-Dfile.encoding=UTF-8 ソースファイル
java -Dfile.encoding=UTF-8 クラス名
しかしこの環境ではjarコマンドなど他のJDKコマンド全てに一々-J-Dfile.encoding=UTF-8
を指定しないといけないので鬱陶しいです。
(なお、自分はcygwin下でbashを用いて作業することが多いのでjavaコマンド以外のJDKのコマンドに-J-Dfile.encoding=UTF-8
を付加したエリアス定義をしてます。コマンドプロンプトでもdoskeyを使うとできるらしいですが、自分はやったことがないです。)
お奨めは...色々面倒なので(1)ですが、UTF-8でソースコードを書くなら、コマンドプロンプトではなくIDEで作業した方がやりやすい気がします。
文字化け以外の問題
質問者さんは上記の(2)でコンパイルしておられ、その時点で文字化けの問題はなくなっていますが、肝心のJavaソースにも問題があるためコンパイルエラーが出ています。mintyさんが指摘されているとおりセミコロンが余計です。それを取り去ればとりあえずコンパイルはできます。
なお、ファイル名は「大文字・小文字を含めクラス名と正確に一致する名前」とした方がよいでしょう。実行する際のクラス名指定は大文字・小文字を正確に指定しなければならず、java Fruit
とタイプすることになるので、Javaのコード上はもちろん、ファイル名の大文字と小文字もきちんと区別する習慣にした方がよいと思います。
たとえば本件ではfruitクラスがpublicでないためコンパイルエラーにはなりません。しかしクラスをpublicにしたとたん、
fruit.java:1: エラー: クラス Fruitはpublicであり、ファイルFruit.javaで宣言する必要があります
と言われてしまいます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
文字化けの件は申し訳ありませんが分かりません。
ただ一点mainメソッドを記述している所なのですが
public static void main(String[] args); ←コレ {
引数の後の";"はいらないです。
これで一番下のエラーは消えるのではないかと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/12/22 15:52
(3)の方法で試したら文字化けせずうまくコンパイル・実行ができました!
ありがとうございました。