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

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

新規登録して質問してみよう
ただいま回答率
85.37%
文字コード

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

Q&A

解決済

1回答

25059閲覧

atomのscriptパッケージ実行時の文字化けについて

suzukisuzu

総合スコア7

文字コード

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

0グッド

1クリップ

投稿2016/05/24 03:18

###前提・実現したいこと
windows10環境でatomのscriptパッケージを用いてjavaの実行をしたいと思っています。

###発生している問題・エラーメッセージ
文字コードShiftJISで実行した所、結果・エラーメッセージ共に文字化けしてしまい、utf-8で実行した場合エラーメッセージが文字化けしてしまいます。
scriptの設定フォルダを変更することでどうにか解消できないでしょうか。

�����ɂ���

###該当のソースコード

java

1public class Test6{ 2 public static void main(String[] args){ 3 System.out.print("こんにちは"); 4 } 5}

###補足情報(言語/FW/ツール等のバージョンなど)
windows10 atom 1.7.4 script 3.7.2
jdk 1.8.0_77

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

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

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

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

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

guest

回答1

0

ベストアンサー

メニューの File -> Init Script... から init.coffee を開いて、下記を追加してください。

CoffeeScript

1process.env.JAVA_TOOL_OPTIONS = '-Dfile.encoding=UTF-8'

Atomを再起動して、UTF-8のソースコードで試して見てください。"Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8"と言う文が前後につきますが、きっとうまくいくはずです。(古いJavaだとオプションが異なるらしいので、Java8以上を使ってください)


【解説】

Javaはシステムのエンコードをデフォルトのエンコードと見なします。つまり、日本語版Windowsの場合は、Windows-31J(別名CP932、Shift_JISの亜種)でJavaのソースコードが書かれているという前提で動作します。そのため、ソースコードがUTF-8の場合、日本語文字列があるとコンパイルに失敗します。これが、Shift_JISにしないとコンパイルすらできない理由です。

なお、コンパイルされた後のバイナリであるclassファイル内で文字列はUnicode(正確にはUTF-16)になっています。

そして、出力に関しても同様で、システムのエンコード、Windows-31Jを使用します。classファイル内のUnicode文字列もWindows-31Jに変換された後に出力されます。コマンドプロンプトで日本語文字列が正常に出るのはこれが理由です。しかし、Atomは全てUTF-8で管理しており、scriptの出力画面もUTF-8になっています。これでは、Windows-31Jで出力されてしまった文字列を正常に表示することはできず、文字化けする理由です。

そこで、全てをUTF-8にしてしまえばいいのだ!というのが上の呪文です。JavaのツールはJAVA_TOOL_OPTIONS環境変数で、javaやjavac実行時のオプションを渡すことができます。init.coffeeにprocess.env.環境変数で設定するとAtom内の環境変数がそれに設定されるため、scriptが内部で実行するjavacやjavaもその環境変数を使います。そうして、コンパイル時もUTF-8を、JavaVM実行時もUTF-8を使うようになり、文字化けが解消されるというわけです。

投稿2016/05/26 14:11

raccy

総合スコア21737

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

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

suzukisuzu

2016/05/27 15:07

無事に実行することが出来ました! お早い回答に解説まで本当にありがとうございます!!
artmind2014

2020/02/08 08:11

あちこち探してダメだったのですが、 ここでダメなら諦めようと思っていたのですが こちらでうまくいきました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問