質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

6180閲覧

javaのソースコードをwindows PowerShellで実行する際、特定の文字(ひらがな)で文字化けが起こってしまいます

tkyer

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/06/18 11:20

前提・実現したいこと

javaを勉強しています。JDK14をインストール、windowpowershellで下記を実行しようとしたところ
特定のひらがな「は」「う」の文字が文字化け?し、class作成ができない状態です。
これらの文字を含まない場合はうまく実行できているようです。javaを始めたばかりで、なんとかこの状況を乗り越えたいです。どなたか解決策があればよろしくお願いいたします。

発生している問題・エラーメッセージ

文字コード:UTF-8

PS C:\YJsample\01> javac Sample2.java Sample2.java:6: G[: ̕(0x81)́AGR[fBOwindows-31jɃ}bvł܂ System.out.println("Javaを?じめましょ?!"); ^ Sample2.java:6: G[: ̕(0x86)́AGR[fBOwindows-31jɃ}bvł܂ System.out.println("Javaを?じめましょ?!");

該当のソースコード

class Sample2
{
public static void main(String[] args)
{
System.out.println("Javaをはじめましょう!");
}
}

試したこと

■文字コードをJISにしたところ、

Sample2.java:6: エラー: この文字(0x81)は、エンコーディングwindows-31jにマップできません
System.out.println("Java繧偵?ッ縺倥a縺セ縺励g縺?!");
^
Sample2.java:6: エラー: この文字(0x86)は、エンコーディングwindows-31jにマップできません
System.out.println("Java繧偵?ッ縺倥a縺セ縺励g縺?!");
^
エラー2個

のように別のエラーが発生してしまいます。

■JDKの環境変数設定は、購入した参考書に沿って行ったため
問題ないと思います。

補足情報(FW/ツールのバージョンなど)

■出力する文字を
例えば「ようこそJavaへ」などの文字にすると
コンパイルが成功するため、どうやら特定の文字「は」「う」
などが原因なのかと思います。

■テキストエディタはWindowsのメモ帳を使っています。
Notepadなどを使って再度試してみましたが、状況は変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ソースファイルがUTF-8の場合はコンパイル時にエンコーディングの指定が必要になります。
エンコーディングの指定は-encodingオプションを使ってjavac -encoding UTF-8 Sample2.javaとします。
また、cp65001の場合は実行するときに-Dfile.encodingオプションが必要になります(これがないと日本語が文字化けします)。
cp932の場合は必要ありません。

  • cp65001

PS

1> chcp 2Active code page: 65001 3> javac -encoding UTF-8 Sample2.java 4> java Sample2 5Java͂߂܂傤! #日本語が文字化け 6> java '-Dfile.encoding=UTF-8' Sample2 #-Dfile.encoding=UTF-8だけは引用符で囲う必要がある 7Javaをはじめましょう! #正しく出力される
  • cp932

PS

1> chcp 2現在のコード ページ: 932 3> javac -encoding UTF-8 Sample2.java 4> java Sample2 #-Dfile.encodingオプションの必要なし 5javaをはじめましょう

ただ、先ほどの方法ではコンパイルや実行をするときに毎回オプションを付けるのでやや面倒です。
そこでファイルの文字コードを変更してしまうという方法があります。
この方法でファイルの文字コードをShift_JISに変更してしまえばオプションを付けずにコンパイル、実行ができるようになります。

メモ帳の場合はファイル保存時にANSIを選択することでファイルの文字コードがShift_JISになります(厳密にはShift_JISではありませんが)。
イメージ説明

  • cp932

PS

1> chcp 2現在のコード ページ: 932 3> javac Sample2.java 4> java Sample2 5Javaをはじめましょう!
  • cp65001

cp65001の場合は実行時に-Dfile.encodingオプションが必要になります。

PS

1> chcp 2現在のコード ページ: 65001 3> javac Sample2 4> java Sample2 5Java͂߂܂傤I #日本語が文字化け 6> java '-Dfile.encoding=UTF-8' Sample2   #-Dfile.encodingオプションが必要 7Javaをはじめましょう!

追記
VSCodeの場合

File-Preferences-Settingsを選択、もしくはCtrl + ,を押して設定画面を開きます。
イメージ説明
encodingと入力してencodingの設定にフォーカスし、UTF-8Shiftjisに変更します。
イメージ説明
これで新規で作成するファイルの文字コードがShift_JISに変わります。

ただ、既に作成されているファイルの文字コードは自動的には変わらないので手動で切り替える必要があります。
ファイルを開いてウィンドウ右下に表示されているUTF-8をクリックします。
するとウィンドウ上部にReopen with encodingSave with Encodingが表示されるのでSave wigh Encodingを選択し、Shift JISを選択すればファイルの文字コードがShift_JISに変わります。

投稿2020/06/18 15:27

編集2020/06/19 05:02
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkyer

2020/06/18 17:21

対応ありがとうございます。とても分かりやすかったです。 試してみたところ、どちらの方法でもうまくいきました。 メモ帳→VSCodeにエディタを変えてみました。 そこで、加えて質問なのですが ・ソースコードは基本的にはUTF-8として保存される→簡略化したい→ソースファイルの文字コードをShift_JISにする。 この流れで、 メモ帳での方法は理解したのですが、VSCodeでの簡略化の方法がありましたら、教えていただきたいです(CPを毎回指定しなくても良い方法) また、 ・VSCodeのエンコードをShift_JISに設定しておけば、ソースファイルはShift_JISで保存されるということなのか?VSCodeのエンコードはUTF-8、Shift_JISのどちらが良いのか? エンコードとCP、ソースファイルの文字コードの違いがいまいち理解できていません。 このあたりについて、もう一度かみ砕いて説明していただけますか。 丁寧に教えていただけたので、さらに理解を深めたいです。 よろしくお願いします!
退会済みユーザー

退会済みユーザー

2020/06/19 07:32 編集

まず最初に、VSCodeには「Java Extension Pack」という便利な拡張機能があり、通常はこちらの機能を使って実行します。 導入方法については以下を参照 https://www.suzu6.net/posts/130-vscode-for-java/ この方法ならjava,javacコマンドを使わず簡単にコンパイル、実行ができるようになります。(コンパイルは保存時に自動でしてくれます) ただ、tkyerさんが使用している参考書ではおそらくjava,javacコマンドを使ってコンパイル、実行していると思うので、一応追加の質問も答えておきます。 >メモ帳での方法は理解したのですが、VSCodeでの簡略化の方法がありましたら、教えていただきたいです 回答に追記したのでた試してみてください。 > VSCodeのエンコードをShift_JISに設定しておけば、ソースファイルはShift_JISで保存されるということなのか?VSCodeのエンコードはUTF-8、Shift_JISのどちらが良いのか? 回答で説明したやり方でVSCodeのエンコードをShift_JISに設定すれば、設定後に新規で作成したファイルはShift_JISで保存されるようになります。 設定前に作成していたファイルはUTF-8のままなので手動で切り替える必要があります。 また、Shift_JISとUTF-8のどちらがいいのか、ですが、 VSCodeのターミナルでコマンドを使って実行するならShift_JIS 拡張機能を使って実行するならUTF-8 がおススメです。 ただ、拡張機能を使って実行する場合は日本語の入力が上手くいかないので以下の回答を参考にしてみてください。 https://teratail.com/questions/264384 > エンコードとCP、ソースファイルの文字コードの違いがいまいち理解できていません。 cpはコードページの略です。cp932はシェルのコードページが932(Shift_JIS)という意味になります(たぶん)。 エンコードと文字コードについては以下の記事が参考になるかと。 https://wa3.i-3-i.info/diff16moji.html
tkyer

2020/06/20 08:35

ご対応ありがとうございます。 さらに理解が深まりました。 >まず最初に、VSCodeには「Java Extension Pack」という便利な拡張機能があり、通常はこちらの機能を使って実行します。 launch.jsonの設定を行い javaやjavacを使わずに実行することが出来ました。 ところが、 ターミナルに PS C:\YJSample\01.vscode\HelloWorld\src> cd 'c:\YJSample\01.vscode\HelloWorld\src'; & 'c:\Users\tkyer0804.vscode\extensions\vscjava.vscode-java-debug-0.26.0\scripts\launcher.bat' 'C:\Program Files\Java\jdk-14.0.1\bin\java.exe' '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:56547' '--enable-preview' '-Dfile.encoding=UTF-8' '-cp' 'C:\Users\tkyer0804\AppData\Roaming\Code\User\workspaceStorage\5a05656d965a9aa6207de2360f1586d2\redhat.java\jdt_ws\HelloWorld_1e9e5d29\bin' 'Sample5' 8進数101の文字はAです。 16進数0061の文字はaです。 と、ソースコード以外の情報も出力するされ、見にくい状態なのですが 何か改善策はありますでしょうか。 度々申し訳ございません。よろしくお願いします!
退会済みユーザー

退会済みユーザー

2020/06/20 11:42 編集

「Ctrl + ,」を押してVSCodeの設定画面を開き、「java console」と入力してJavaプログラムの出力先の設定を開きます。 すると、一番上に「Java › Debug › Settings: Console」が表示され、「integratedTerminal」が設定されてると思います。 この設定を「integratedTerminal」から「internalConsole」か「externalTerminal」に変更することで出力先が変更されて実行結果だけが表示されるようになります。 個人的には「internalConsole」がおススメです。 「externalTerminal」は別にウィンドウが表示されてしまいなんかカッコ悪いので笑。 ただ「internalConsole」に変更した場合はデバッグコンソールでは入力ができないので入力したい場合は出力先をターミナルに戻すか「externalTerminal」に変更する必要があります。 いちいち変更するのが大変なら「externalTerminal」の方がいいかもしれませんね。
退会済みユーザー

退会済みユーザー

2020/06/20 11:21

ちなみに、実行結果以外に表示されているものですが、これは「Debugger for Java」という拡張機能(Java Extension Packに入っている)がJavaのプログラムを実行するために自動生成されたコマンドです。 このコマンドが自動生成されるおかげでボタン一つで実行できるようになっているというわけです。 生成されたコマンドをよく見ると「'-Dfile.encoding=UTF-8'」や「'Sample5'(ファイル名)」などJavaのプログラムを実行するために必要なコマンドを見つけることができます。
tkyer

2020/06/24 12:43

設定を変更してみたところ、うまくいきました。 また、補足情報もありがとうございます。 おかげで環境構築をうまく行うことができました。
guest

0

UTF-8で保存したまま、javac -encoding UTF-8 Sample2.javaでコンパイルしてください。
手元で試した限り、PowerShellでもcmdでもエラーは発生しません。
もちろん、java Sample2で実行するときも文字化けしません。

投稿2020/06/18 13:29

編集2020/06/18 13:31
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkyer

2020/06/18 17:34

回答ありがとうございます! コンパイルはできたのですが、実行において、日本語が文字化けしてしまいました。 他者の回答を見ると 実行の際に-Dfile.encodingオプションを使わないといけないとのことでした。 Daregadaさんは、エディタとして何を使われていますか? (VSCodeで試してみました。) 簡略化するためには、なるべく手間がかからないほうが良いと思って、再度質問させていただきました。
guest

0

VSCODEの実行でもでたのですが、PSは日本語の扱いがダメっぽいです。
PSを使わないという選択をオススメします。

で、対処方法ですが。

UTF-8でなくSJISで実行をします。
ただし、実際に体験されているとおりコンパイル時にエラーがでます。

なので、コンパイル時にオプション(-encoding UTF-8 )を付けてください。

PS

1> chcp 2現在のコード ページ: 932 3> javac Sample2.java 4Sample2.java:3: エラー: この文字(0x81)は、エンコーディングwindows-31jにマップできません 5 System.out.println("java繧偵?ッ縺倥a縺セ縺励g縺?"); 6 7Sample2.java:3: エラー: この文字(0x86)は、エンコーディングwindows-31jにマップできません 8 System.out.println("java繧偵?ッ縺倥a縺セ縺励g縺?"); 9 10エラー2個 11> javac -encoding UTF-8 Sample2.java 12> java Sample2 13javaをはじめましょう

投稿2020/06/18 11:45

momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問