タイトルBrowsing Mac OS X》純粋Java関連記事の追加と、Mac OS XのJavaのシステムプロパティカテゴリーBrowsing Mac OS X, ProjectBuilder/Interface Builder, Java
作成日2001/3/29 13:44:48作成者新居雅行
MDOnlineで2001年3月28日にお届けした“Browsing Mac OS X》純粋Java開発が可能になったMac OS X”において、ファイルのエンコードをコンパイラに指定することで、プログラム内に記述した日本語文字列を正しく実行アプリケーションに表示させることを紹介した。これを御覧になったAppleの井上さんより、もっと効率的な方法があることを教えていただいた。Project Builderで、ソースファイルを表示しているときに、FormatメニューのFile EncodingsからNo-lossy Asciiを選択する。これによって、native2asciiコマンドを使ってコンバートした結果でファイルに保存される。つまり、「日本語」は「\u65e5\u672c\u8a9e」という1バイト文字列に展開されてファイルに保存される。この状態だと、JAVA_COMPILER_FLAGSにエンコードの指定はしなくても、コンパイルし、日本語の表示ができる。エンコードを指定するとより時間がかかるので、効率を高めるためには、ファイルのエンコードはNo-lossy Asciiを指定しておくのがいいということだ。

それから、Java Toolsでファイルの処理を行う時、データファイルがShift-JISの場合、javaコマンドで実行する時に、-Dfile.encode=x-sjisという指定が必要だが、Java Applicationのテンプレートで作ったものは不要だと説明した。しかしながら、テキストファイルから読み込むプログラムで、文字列への読み込みを行った場合に文字化けが見られた。やはり、通常のJavaアプリケーション(つまり、MRJAppBuilderでパッケージ化されたもの)でも、システムプロパティの設定が必要になる模様だ。設定するには、プロジェクトにあるMRJApp.propertiesファイルに「file.encoding=x-sjis」と記載しておけば、Shift-JISのテキストファイルから、文字列変数に問題なく文字列が読み込めた。以下で説明するが、file.encodingの既定値はMacRomanなのである。

□システムプロパティをダンプしてみた
Projec BuilderでJava Applicationをテンプレートに作ったアプリケーションで、System.getProperties()を使ってプロパティを得たのが別掲の記事で示したものだ。参考までに、すべてのプロパティを掲載しておく。まず、line.separatorは0x10つまりLFコードになっている。Mac OSでは0x13だったので、改行コードをそのままプログラムに記述しているようなプログラムは、この機会にシステムプロパティから得るようにすべきだろう。user.languageはjaとなっており、日本語になっている。システムの言語を日本語にした状態で稼動させたが、そのあたりはきちんと認識している。ちなみに、言語の優先順位でEnglishをトップにすると、user.regionはUS、user.languageはenになる。このプロパティで、現在のシステムの優先される言語は判断できそうだ。だけどその状態では、Labelクラスに設定した日本語が文字化けした。英語を言語として選んでいる時、既定の状態では日本語表示可能なフォントが割り当てられていないのであろう。file.separatorはスラッシュであり、コロンではない。file.encodingはx-sjisなどではなく、MacRomanになっている。ファイルの読み書きが絡む場合には、このシステムプロパティは要注意というところだろうか。Javaのバージョンが1.3.0となっている。OSのバージョンは10.0となっている。プログラムで稼動しているOSなどを判断する必要があるようなプログラムでは、いくつかのシステムプロパティをチェックしておく必要があるかもしれない。
関連リンク