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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Java

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

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

文字コード

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

Q&A

解決済

2回答

4400閲覧

javaファイルのコンパイル

beginerbeginer

総合スコア10

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Java

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

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

文字コード

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

0グッド

0クリップ

投稿2016/11/16 13:51

###前提・実現したいこと
メモ帳のjavaのファイル(ダブルクォーテーションで囲まれた日本語を含む)をwindows10のコマンドプロンプトでコンパイルしたい。

###発生している問題・エラーメッセージ
'\u0000'?不正?文字??
###該当のソースコード
public class HelloWorld {
static public void main(String args[]){
System.out.println("ひかり");
}
}
###試したこと
ANSIだと漢字は問題ないのですが、ひらがなを保存できず、Unicodeで保存したのですが、unicodeだと、ひらがなを使わなくてもコンパイルできなかった。

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

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

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

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

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

MasahikoHirata

2016/11/16 14:00

JDKによるコンパイルと解釈して良いのでしょうか?その他の環境であればそれを明示した方が回答が正確になると思いますが。
beginerbeginer

2016/11/16 14:14

はい、そうです。よろしくお願いします。
guest

回答2

0

ベストアンサー

以下のような事情があります。

  • 日本語版Windowsでの、JavaのデフォルトエンコードはWindows-31J(Shift_JISの亜種、別名CP932、MS932)です。
  • javacによるコンパイルでは、オプション等をしていない場合、ソースコードがデフォルトエンコードでエンコードされていると想定します。自動的に認識はしてくれません。
  • 日本語版Windowsでの、メモ帳の「ANSI」はWindows-31Jです。「Unicode」はBOM付きUTF-16(Little Endian)、「Unicode big endian」はBOM付きUTF-16(Big Endian)、「UTF-8」はBOM付きUTF-8です。なお、Unicode系はBOM付きです。
  • 絵文字「????」や一部の漢字「????」などはWindows-31Jに含まれていないため、メモ帳では「ANSI」で保存できません。
  • 基本的にひらがなはWindows-31Jに含まれているため、メモ帳では「ANSI」で保存できます。しかし、ごく一部の特殊なひらがな「ゔゕゖ」はWindows-31Jに含まれていないため、「ANSI」で保存できません。

まず、コンパイルエラーになるのはjavacがWindows-31Jであるという前提でソースコードを読み取ろうとするからです。Windows-31Jには存在しない文字が見つかった場合、javacはエラーになり、コンパイルに失敗します。これを防ぐにはjavacの実行時に-encodingオプションでエンコードを指定する必要があります。

UnicodeまたはUnicode big endianで保存した場合に対応(どちらのEndianかはBOMより自動判別してくれます)

javac -encoding UTF-16 Sample.java

UTF-8で保存してしまった場合ですが、javacはBOM付きUTF-8を扱うことはできません。ですので、BOM無しUTF-8にする必要があるのですが、メモ帳はBOM無しUTF-8で保存することができません。メモ帳でUTF-8で保存したJavaのソースコードを直接javacでコンパイルする方法は存在しません。

なお、ひらがながあるとANSIで保存できなかったとのことですが、上で挙げた通り一部のひらがなはWindows-31Jになく、ANSIで保存できません。そのごく一部のひらがなが含まれてしまっていたと推測されます。

以上ですが、シンタックスハイライトをしてくれないなどメモ帳でのコーディングには限界がありますので、コーディングに適した高機能なエディタやIDEを使うことをお勧めします。

投稿2016/11/16 15:04

raccy

総合スコア21735

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

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

beginerbeginer

2016/11/17 02:08

たすかりました!ありがとうございました!
guest

0

投稿2016/11/16 14:18

Orlofsky

総合スコア16415

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

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

beginerbeginer

2016/11/16 14:35

おかげで上記のエラーはなくなりました。ありがとうございます。ですが、コンパイル後実行したときに、Unicodeでメモ帳のjavaファイルは保存したのですが、ひらがなの文字数だけ、?で表示されてしまいました。
Orlofsky

2016/11/16 14:40

URLはちゃんと読むと共に、きちんと実行したコマンドを提示しましょう。 上記URLの >javac -encoding UTF-8 JSample2_1.java でコンパイルしましたか?
beginerbeginer

2016/11/16 14:45

javac -encoding Unicode Sample3.java でコンパイルしました。ファイル名はSample3.javaで、Unicodeで保存しました。
Orlofsky

2016/11/16 14:47

ファイルをUTF-8 で保存して javac したらどうなりますか?
beginerbeginer

2016/11/16 14:53

そのように保存し、javac -encoding UTF-8 Sample3.javaでコンパイルしたら、'\ufeff'?不正?文字?というエラーが表示されました。
Orlofsky

2016/11/16 15:08

メモ帳ではなく、サクラエディタを使ってみてください。 http://sakura-editor.sourceforge.net/ それでもダメなら最初のURLにある他のエンコードも試していただきますか?
beginerbeginer

2016/11/17 02:07

ありがとうございます!試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問