Xcodeでjava(文字化け)

Xcodeでjavaの練習中ですが、コンパイル時のエラーが文字化け(例:\212\372\211\273\ .....)して読めません。webを検索するとコンパイル時のUTF-8への設定に問題があるようで下の対策が乗っていました。しかし自作のプログラムではプログラムのターゲットにはjavaコンパイラ設定の項目がありません。どなたか具体的対策をご教授願えないでしょうか。(Snow Leopard 10.6.4 + Xcode 3.2.2)


web上で発見した対策:グループとファイルのターゲットの中のターゲットをダブルクリックし、開いたウインドウ内の設定の中のjavaコンパイラ設定からソースアイルのエンコーディングをUFT-8にする。

iMac, Mac OS X (10.6.4)

投稿日 2010/07/30 14:52

返信
返信: 11

2010/07/30 15:42 -s への返信

こOSXは改行がLFつまり\nになってないとErrorになります。

\r \nがWindowsで \nがOSXやUnixです。


Terminalで改行の状態を表示して下さい。

od -c [path to file] | more


変換するPerl scriptです。

windows -> osx

perl -pe 's/\r\n/\n/' ~/Desktop/aaa.txt > ~/Desktop/bbb.txt


osx -> windosx

perl -pe 's/\n/\r\n/' ~/Desktop/aaa.txt > ~/Desktop/bbb.txt


Space: 2 bytesコードが紛れ込んでも駄目だと思います。

# 日本語Editorを使ったことがないのであしからず

2010/07/30 17:00 ぴっぴ への返信

ぴっぴさま。

まったく持って申し訳ないのですが、ますます意味が解りません。

1)Xcodeでのjavaコンパイル時のコンパイルエラーメッセージの文字化けは直すことができるのでしょうか?

それともwinとmacの改行コード違い、2バイトコード混在の関係で文字化けは避けられないのでしょうか?

2)文字化けを直せるとしたらXcodeを起動して設定を変更するのではなく、ターミナルで変更するのでしょうか?


どうも最初のところで勘違いしているようなので、よろしくお願いします。

2010/07/30 18:35 -s への返信

XcodeではなくeclipseやNetBeansをお使いになったほうが良いようです。

# Xcode 3.2.3にはJava Toolがない、廃止になったようです。


Termianlで文字化けなしでコンパイル出来ないですか?


Hello01.java

class Hello01 {

public static void main(String args[]){

System.out.println("Hello Java World!");

}

}


1. Termianalを起動して下さい。

cd ~/Desktop

# Desktopで作業を行います。


2. picoでjavaを作る。

pico Hello01.java

class Hello01 {

public static void main(String args[]){

System.out.println("Hello Java World!");

}

}

control+x y で保存 Hello01.javaが出来上がる。


3. Hello01.javaのコンパイル。

javac Hello01.java

Hello01.class

# Hello01.class コンパイル 成功 !!


4. Hello01.classの実行です。

java Hello01


Hello Java World!

javaが動きました。

2010/07/31 17:12 -s への返信

TerminalでCompileするなら~/.bashrcに書き込む方法がありましたけど...

export _JAVA_OPTIONS=-Dfile.encoding=UTF-8


JDK6はSJISなので環境変数を設定するしかないようです。

昨日UpdateしたXcode 3.2.3で.javaをOpenしてもBuildはグレーで動かないしJava Toolがありません。

# Tiger時代のXcodeのCompileを参考にしてるのかな

2010/10/14 05:16 -s への返信

お困りのようですね。私もこの問題に今更ながら直面しています。


まず、Xcode 3.2.3でのJavaの開発テンプレートですが、Xcode 3.1のJavaのものをしかるべきフォルダ


/Developer/Library/Xcode/Project Templates


に持ってくれば、テンプレートはすぐに移行できます。それで、XcodeでのJavaのファイルのエンコーディング

は、antベースなので、build.xmlに、次のように書けば通る(encoding="SJIS"の部分)かと思いきや、


<javac deprecation="on"srcdir="${src}"destdir="${bin}"

source="1.5"target="1.5"encoding="SJIS"

includeAntRuntime="no"

classpathref="lib.path"debug="${compile.debug}">


エラーメッセージまではエンコードしてくれず、困っております。さて、一番簡単なWork aroundですが、

Xcodeを英語モードで起動することです。そのやり方は、「システム環境設定」の「言語とテキスト」の

ペーンにおいて、「言語」タブの優先順位を「English」にしておきます。そうして、Xcodeを起動します。

後のアプリケーションのために、優先順位は日本語に戻しておいてください。


そうすると英語で起動されますので、エラーメッセージも英語で記述してくれます。


たぶん、このバグは、昔からあるバグ(ターミナルの表示なども\223\223…みたいになる)なので、

今更変更してくれないと思うのですが、


/Developer/Applications/Xcode.app/Contents/Resources/Japanese.lproj/


の下にある.nibファイルはコンパイルされているようで、手のつけようがありません。困ったものです。

ということで、2ヶ月近い遅いフォローですが、英語モードでXcodeを使ってみて、なんとか凌いで

下さい。

2010/10/18 11:19 -s への返信

-s様、


まだまだ諦めてはいけません。というか、私自身が諦めの悪い性質なので、この問題解決法を模索しました。以下が不正確ではあるのですが、解決法になっています。


問題は、XcodeはUTF-8なのに、javaの日本語環境は未だにShift JISを標準にしているということです。ということでエラーメッセージがShift JISで送られてきたものを、XcodeがUTF-8と解釈して表示しているので、このような状況になっている訳です。


そこで、まず端末ベースでShift JISをUTF-8に直す方法を紹介します。これは、fj.sys.mac.osxでの琉球大の河野さんと筑波大学の新城さんのやり取りをネットワークで検索して、そこから回答を得ました。お二人とも、古い(1990年ぐらい)の知り合いです。それはともかく、、、一般のencodingオプションで直るかと思いきや、次のようなオプションにしないとエラーメッセージがUTF-8に直ってくれません。


javac -Dfile.encoding=UTF-8 Sample.java


上の例は、Sample.javaファイルをコンパイルするときのものです。それで、これと同様のことをXcodeでさせなければいけないのですが、Xcodeは3.0からプロジェクトのビルドにapache antを利用しています。ですから、build.xmlの指定で、このオプションを指定しなければなりません。それができる記述が、以下のような感じです。<compilerarg>タグの記述で上記のオプションを指定します。



<target name="compile"depends="init"description="Compile code">

<javac srcdir="${src}"destdir="${bin}"

source="1.5" target="1.5"

includeAntRuntime="no"

classpathref="lib.path">

<compilerarg prefix=" -J-Dfile.encoding=utf-8 " />

</javac>

</target>



これが動くかと思いきや、動きません。というのは、Xcode 3.2.3までは、antのバージョンが、1.7ベースです。この<compilerarg>タグの中のprefix属性が使えるのは、1.8からのantでしか動きません。それで、1.8.1のantをダウンロードして、実際にインストールして(1.8のantを作るには、junitsが必要)試してみましたが、何か、1.8にするとXcodeの方が対応していないようで、うまく動きません。ちなみに、1.7ベースでvalue属性を使えば良いだろうという指摘される人もいるでしょうが、value属性では、オプションがファイル名の前にいかないようです。


などなど、この数日間空き時間を使って調べてきました。ということで、Xcode 3.2.3までは、やはり文字化けしたままになるのですが、今、これを書きながら、Xcode 3.2.4 + iOS 4.1 SDKをダウンロードしています。もしかしたら、これでantも自動で1.8.1にしてくれたり、そこまではいかなくても、Xcodeが、antの1.8に対応してくれたりするのではないかと、淡い希望を抱いています。


Xcode 3.2になってから、Javaなどのテンプレートを標準でインストールしていないのは、たぶん、日本語環境でこのような問題が発生していて、antのバージョンも上がっていなかったので、Apple側が手のつけようがなかったからだと、邪推してみているのですが、取りあえず、Xcode 3.2.4でうまくいくようであれば、またご報告差し上げます。これは、Xcodeのバージョンが上がることで解決する問題ではないかと思います。Bug Reportにも、回避策がうまくいけば、報告しておきます。その前に、まずjavacの日本語のエラー出力コードを、UTF-8にしろっ!って言わないといけませんよね。


ちなみに、Eclipseは毛嫌いしておりまして、BlueJ(http://www.bluej.org)をMac OS XでもWindowsでも利用しています。

2010/10/19 13:56 KyShin への返信

まあまあ許せる範囲でうまくいきました。antバージョンは関係なく、指定できる方法を発見しました。ちなみに、上記の返信のところで、<compilerarg>の書き方が間違っていまして、1.8から導入された、prefix属性は、「argumentの前に置かれる」のものなので、勘違いしていたのですが、すべての引数の前に置かれるかと思いきや、該当する引数の手前に置かれるだけでした。ということで、現行の1.7でもできます。


<compilerarg value="-J-Dfile.encoding=UTF-8" />


と書くのですが、これだけでは、まだうまくいきません。build.xmlで、次のように、fork属性とexecutable属性を使って、javacを外部起動するようにしてあげます。


<target name="compile"depends="init"description="Compile code">

<javac srcdir="${src}"destdir="${bin}"

source="1.2" target="1.3"

includeAntRuntime="no"

classpathref="lib.path"

fork="yes"

executable="/usr/bin/javac">

<compilerarg value="-J-Dfile.encoding=UTF-8" />

</javac>

</target>


このようにすると、ちょっと文字化けしますが、なんとか見れる範囲で日本語のエラーメッセージを表示してくれます。お試しください。たとえば、JPanelをJPanelsと書いたりすると、次のような表示がされます。


Sample.java:19: シンボルを見つけられません\343\200?

シンボル: クラス JPanels

場\346\211? : RGBProduce の クラス

JPanels control;

^


エラー 1 \345\200?


最後の方は、ちょっと文字化けしていますが、まあ、見れる範囲でしょう。



このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Xcodeでjava(文字化け)

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。