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

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

ただいまの
回答率

90.76%

  • Java

    13155questions

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

javaコードを実行すると文字化してしまいます

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 351

newyee

score 73

javaを勉強中のものです。
以下のコードをコマンドプロンプトで実行してみたのですが、文字化け?してしまい、エラーになってしまいます。
文字化けしてしまっている部分は、「㎠」の部分です。
テキストエディッタはsublimeTextを使用していまして、実行時には、javac -encoding UTF-8 とファイル名の前につけ加えていまして、他の日本語に関しましては、文字化けなどしていないのですが「㎠」の部分だけ文字化けしてしまっています...
対処法などありましたら、教えて下さい。
よろしくお願いします。

public class calc {
    public static double calcTriangleArea(double bottom, double height){



        double ans = bottom * height / 2.0;

        return ans; 
    }

    public static double calcCircleArea(double radius){



        double ans = radius * radius * 3.14;

        return ans;
    }

    public static void main(String[] args){



        double triangleArea = calcTriangleArea(5.0, 3.11);
        double circleArea = calcCircleArea(3.77);

        System.out.println("三角形の面積は" + triangleArea + "㎠" );
        System.out.println("円の面積は" + circleArea + "㎠");

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • newyee

    2018/05/12 16:10

    ダメでした...javac -encoding UTF-8 calc.javaとコンパイルしたのち、「java -Dfile.encoding=UTF-8 JavaFQCN 」とやってみたのですが、やはり「㎠」の部分が「?」になってしまいます。

    キャンセル

  • newyee

    2018/05/12 16:12

    あ、すみません。「FQCN」の部分はクラスが見つからないとでましたので、ご質問させて頂いたコードのファイル名、「calc」を入力しました。

    キャンセル

  • asahina1979

    2018/05/12 16:46

    FQCN :完全限定クラス名 .. パッケージ名+クラス名のこと

    キャンセル

回答 4

checkベストアンサー

+1

問題はという文字にあるようです。

この文字はユニコードでいうとU+33A0ですがWindows-31Jに対応する文字が存在しないようです。それゆえWindows-31Jでコンソール入出力をする限りはどうしようもありません。

Windows-31JあるいはShiftJIS系の文字コード全般に言えることですが「計算機で使える全ての文字は表せません」ごくごく一部しか表現できないのです。こうした不便を解消するためにこそUNICODEがあるわけです。

さてWindows上でJava(系のコマンド)をUTF-8などで動かすための配慮ですが

  • cmd.exe or powershellならchcp 65001とする
    WSL, GitBashなどのソフト, cygwin等々では設定方法が違いますが省略します。

  • Javaへ「入出力のデフォルトをUTF-8にせよ」と明示する
    コマンドラインオプションでjava -Dfile.encoding=UTF-8 calcとすればよいです。ただ
    javacだとこれが -J-Dfile.encoding=UTF-8とかになって面倒なことこの上ないですね・・・

自分はコマンドラインオプションがめんどくさすぎるので違う方法を使うようになりました。

  • 環境変数JAVA_TOOL_OPTIONS
    cmd.exe上ならset JAVA_TOOL_OPTIONS=-Dfile.encoding=utf8としておきます。
    コントロールパネルの環境設定で設定してしまった方がいいでしょう。

JAVA_TOOL_OPTIONSはjavac, java, jarだけでなく全てのjdk/jre提供コマンドで有効な設定です。ただしコマンドを実行する度に
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf8
というメッセージが出てしまう点、悲しいものがあります。それでも、オプションを一々指定することに比べればましではないでしょうか?


訂正:間違って関係ないコメントを追記してしまいました。大変失礼しました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/11 21:47

    chcp 65001 として java -Dfile.encoding=UTF-8 calc を実行しても ㎠ だけ文字化けします。環境は Windows10 の cmd.exe です。

    キャンセル

  • 2018/05/11 21:55 編集

    chcp 65001の状態でtype calc.javaとしたら㎠は文字化けせずに表示されますか?もし文字化けしてないなら再度以下のとおりにやってみたらどうなりますか?
    javac -J-Dfile.encoding=utf8 calc.java
    java -Dfile.encoding=utf8 calc

    キャンセル

  • 2018/05/11 22:07

    type calc.java -> ㎠ だけ文字化けします。
    リコンパイル・実行 -> ㎠ だけ文字化けします。

    キャンセル

  • 2018/05/11 22:12

    えーと・・・ソースファイル自体が文字化けしているので正しくコンパイルすること自体ができてません。
    まずソースファイルの文字化け自体を解消してください。
    sublimeTextでもメモ帳でもutf-8の編集やセーブは行えると思います。

    キャンセル

  • 2018/05/11 22:18

    エディタ(Eclipse, メモ帳, Vim)で見る限り文字化けはしていません。
    java -Dfile.encoding=utf8 calc > a.txt
    として a.txt をエディタで開くと文字化けはありません。

    キャンセル

  • 2018/05/11 22:30

    これは不思議です。自分もWindows10 64bitですがcmd.exeで上のソースを実行するとchcp 65001をしておけば文字化けせずに㎠が出ます。

    しつこいようですが、「type calc.java -> ㎠ だけ文字化けします。」これはchcp 65001した状態で㎠だけ化けるということですよね?

    キャンセル

  • 2018/05/11 22:38

    すみません。コマンドプロンプトのフォントを変更したら文字化けしないようになりました。

    キャンセル

  • 2018/05/11 22:40 編集

    あらら。変えてたんですか。予想外です。
    それはともかく解決してなによりです。
    ---
    もしよかったら「何のフォントを設定していたから」文字化けしていたのか教えてください。

    キャンセル

  • 2018/05/12 04:56

    「MigMix 1M」です。Eclipse ではエディタとコンソールをこのフォントにしていて何の問題も起きていません。ConEmuというコンソールでも使っていますがchcp 65001なら文字化けしません。cmd.exeだけ文字化けします。

    キャンセル

  • 2018/05/12 10:33 編集

    情報ありがとうございます。なるほど文字化けしますね。いくつかのものでやってみました
    cmd.exe => NG
    powershell => NG
    Windows Subsystem for Linux => NG
    cygwin(64bit) => OK
    MinGW(64bit) => OK
    自分は普段cygwinでConsolasを使ってますがConsolasだとcmd.exe/powershellでは日本語自体が表示できなくなりました。
    おそらく複合フォントはcmd.exe/powershellでは対応してなくて、ComEnu/cygwin/mingwのコンソール、Sublimetext/Atomの端末プラグインのようなものならサポートしているということではないかと思いました。

    cmd.exe/powershellでは無難にMSゴシックにし、それ以外の環境でMigMixを利用するのがとりあえずの対応になるのではないでしょうか?

    キャンセル

  • 2018/05/12 16:17

    ご回答ありがとうございます。
    勉強不足で、申し訳ないのですが、ご回答下さったこちらの部分「cmd.exeでchcp 65001とする。」なのですが、コマンドプロンプロトのどの部分でchcp 65001とすれば良いのでしょうか...?

    キャンセル

  • 2018/05/12 16:36 編集

    コマンドプロンプトを起動してから
    chcp 65001
    というコマンドを打ち込むということです。その意味はcmd.exeが使用しているコンソール画面でテキストの入出力をutf-8で行うように文字セットを変更するという意味です。

    キャンセル

  • 2018/05/12 17:46

    文字化け解消されました!
    ありがとうございます。すみません。まだプログラミングなどの勉強始めたばかりでして、理解できない部分があり申し訳ないのですが、文字化けの原因と致しましては、
    sublime textで書いたソースコードの文字コードに「㎠」が存在していなかったため、コマンドプロンプトの方で、「㎠」が存在する文字コード、「utf-8」に変換をし、実行した。←このような理解で合っていますでしょうか...?

    キャンセル

  • 2018/05/12 18:52 編集

    表現をはしょりすぎていて「正しい」とは言い難いです。
    ・ソースコード:UTF-8として「㎠」が存在
    ・javac -encoding utf-8でコンパイル=>「㎠」は正しくクラスファイルへ反映される
    ここまでは問題なし。ここからが問題。
    ・cmd.exeでchcp 65001をせずにjava calcと実行
    =>javaは標準出力へ文字セットWindows-31Jへ変換する。しかし「㎠」はWindows-31Jには存在しない文字なので変換不能という意味で'?'というWindows-31Jの文字(クェスチョンマーク)へ変換した。cmd.exeはJavaから'?'というWindows-31Jの文字を受け取ったのでそのまんま'?'と画面に表示した。これが文字化けに見えた。

    最初発生していた問題の原因は正確にはこのように理解すべきと思います。

    キャンセル

  • 2018/05/13 17:03

    ご丁寧に教えて下さりありがとうございました。
    おかげでなんとか理解することができました。
    ご回答下さった部分で勉強不足が故、知らない単語など多々ありましたので、javaの勉強にもっと励んで参りたいと思います。

    キャンセル

+1

  • フォント
    MS ゴシック

  • コードページ
    65001 (UTF8)

  • コンパイル:

javac -encoding UTF-8 Square.javac
  • 実行
java -Dfile.encoding=UTF-8 Square 1 2
  • コード
public class Square {

    public static void main(String[] args) {
        if (args.length != 2) {
            usage();
            System.exit(1);
        }
        try {
            int x = Integer.valueOf(args[0]);
            int y = Integer.valueOf(args[1]);

            System.out.printf("%d x %d = %d ㎠", x, y, x * y);
        } catch (NumberFormatException e) {
            usage();
            System.exit(1);
        }
    }

    protected static void usage() {
        System.err.println("Usage: Square x y");
        System.err.println("x : number");
        System.err.println("y : number");
    }
}
  • 結果
    イメージ説明

フォントの誤りでしょうね
久々10年ぶりぐらいに cmd.exe 出力する java を実行したが CHCPはいるのか(わすれてたな)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/12 11:01

    ぼけかまして立方米でやってたな(まあ同じか)

    キャンセル

  • 2018/05/12 11:05

    ※ ラスターフォントでは ㎠や㎤はないようです

    キャンセル

0

コマンドプロンプトであれば

chcp 65001

としてから実行してください。

コマンドプロンプトはUTF-8ではありません。

chcpは不要です。訂正します。
文字化けは解消していません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/11 19:17

    私の環境(Windows10)でも質問と同じ現象が再現しました。chcp 65001 としてから実行するとすべての漢字が文字化けします。

    キャンセル

  • 2018/05/11 19:44

    あー文字化けしますね、確認不足でした。ちょっと確認しますね。

    キャンセル

  • 2018/05/11 19:50

    確認のため、
    javac -encoding UTF-8
    でコンパイルしたclassファイルをmacに持っていって実行(java calc)してみましたが文字化けしませんでした。ですのでコンパイルの仕方は問題なくて、問題は別のところにありそうです。

    キャンセル

  • 2018/05/11 20:02

    chcp 65001 とした状態で
    java -Dfile.encoding=utf-8 calc
    を実行すると㎠だけ文字化けしますが、出力をファイルにリダイレクトすると、正しいUTF-8ファイルができています。

    キャンセル

  • 2018/05/11 20:11 編集

    誤:多分 CHCP は不要じゃね

    キャンセル

  • 2018/05/11 20:30

    chcpはふようですね。

    キャンセル

-1

#################

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13155questions

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