WebObjects:Javaソースコードに日本語を埋め込む
【問題】
WebObjectsで開発したWebアプリケーションで日本語を表示しようとしたときに,日本語文字列をJavaソースコードに埋め込んで,
String str = "こんにちは"; |
【原因】
Javaコンパイラはデフォルトでソースファイルの文字コードを英文として解釈しようとします。
JavaのStringクラスが文字列データをUnicode(UCS-2)で保持するため,コンパイル時にソースファイル中の文字列データに対して文字コード変換を行います。このときソースファイルの文字コードがたとえばShift_JISだった場合,コンパイラが行うべき文字コード変換が「英文→UCS2」ではなく「Shift_JIS→UCS-2」でなければならないことをJavaコンパイラに知らせる必要があります。逆にコンパイラに「Shift_JIS→UCS-2」の変換を指定した場合,すべてのソースファイルの日本語文字コードがShift_JISに揃っていなければなりません。
【対応策】
この問題に対処するには次の2つの対処を行います。
1)開発環境からJavaコンパイラに対して,オプション指定で日本語文字コードを指定する。
2)ソースファイルで使用する日本語文字コードを1)で指定したものに統一する。
●Mac OS XのWebObjects開発環境では以下の手順でこれに対応します。
1)Javaコンパイラに日本語文字コードを指定する。
・ProjectBuilder(Mac OS X 10.2.xまで)の場合:
「ターゲット」タブを選んで,各ターゲットの「Javaコンパイラ設定」を開くと「ソースファイルのエンコーディング」というポップアップメニューがありますので,これをソースコードの文字コードと同じものにします。そのためにはProjectBuilderの「ProjectBuilder」メニュー→「環境設定」ダイアログの「テキスト編集」タブ→「デフォルトのエンコーディング」に設定してある文字コードと同じものにしてください。この操作はすべてのターゲットで行ってください。
・Xcode(Mac OS X 10.3以降)の場合:
ウインドウの左枠の中に「ターゲット」があり,この中には通常プロジェクト名,「Application Server」,「Web Server」の3つのターゲットがあります。この各ターゲット名をダブルクリックすると,ターゲットの設定ダイアログが表示されます。この中の「Javaコンパイラの設定」を選んで表示される設定パネルに「ソースファイルのエンコーディング」がありますので,ここでソースファイルの文字コードを指定します。この操作はすべてのターゲットのすべての「設定」ポップアップで行ってください。
注意:開発の初期の段階で,すべてのターゲットと設定で文字コードを指定しておくことは重要です。
開発版の設定の文字コードだけ変更しても,開発環境で動作テストするときは正常に動作しますが,そのまま開発を続けると,運用版をビルドして実機で稼動させるときになって文字化けが再発することになります。変更が必要だとわかっているうちに忘れずに変更しておきましょう。
以上の操作を行うことで,Javaコンパイラはソースコードが指定した文字コードで書かれているものとして処理するようになります。
2)ソースファイルの文字コードの設定
ProjectBuilder/Xcodeにおいて新規ファイルを作成すると「環境設定」→「テキスト編集」→「デフォルトのファイルエンコーディング」で指定した文字コードが適用されます。そのためこの値も1)で指定したものに合わせます。ただし「新規プロジェクト」で作成されるソースファイル(「Application.java」「Session.java」「DirectAction.java」)の文字コードは設定にかかわらず「Mac OS Roman」なので,これらの文字コードは後で手動で変更する必要があります。
各ソースファイルの文字コードはProjectBuilder/Xcodeが認識しており,ソースコードの編集で日本語入力が行われると,認識されている文字コードで日本語文字列がソースコードに挿入されます。特定のソースファイルの文字コードがどのように認識されているかは,ソースファイルをプロジェクトから開いて「形式」メニュー→「ファイルエンコーディング」で確認することができます。ここで認識されている文字コードと,1)で指定した文字コードが食い違っていた場合,文字化けを起こす原因になります。
この食い違いを正すには,ProjectBuilder/Xcodeの「形式」メニュー→「ファイルエンコーディング」で正しい文字コードを指定します。すると「再解釈」または「変換」を指定するダイアログが表示されるので,開発環境の文字コードの認識の間違いを正す場合は「再解釈」を,別の文字コードに変換する場合は「変換」を選びます。これによりソースファイルの文字コードとコンパイラが認識する文字コードを合わせることができます。
注意:文字コードの認識が間違った状態で「変換」を行うと日本語文字列データが壊れます。壊れたまま上書き保存してしまわないようにしましょう。
3)WebObjectsBuilderの環境設定
WebObjectsBuilderはソースファイルへのメソッドの追加などを行いますが,このときWebObjectsBuilderの環境設定で指定された文字コードと実際のソースファイルの文字コードが異なる場合,ソースファイルの日本語文字データが壊れます。そのためWebObjectsBuilderの環境設定でも1)と同じ文字コードを設定しておく必要があります。
この設定は,「WebObjects Builder」メニュー→「Preferences...」で環境設定ダイアログを開いて「General」タブの「Default encoding」ポップアップで行います。
■関連情報
WebObjects:[日本語技術マニュアル][API Reference(javadoc)][ADC Tools][サポート]
■関連書籍をAmazonで検索:[Java][WebObjects 和書 洋書]
●プログラミングMacOS X for Java Geeks
| 固定リンク
「プログラミング」カテゴリの記事
- シェルスクリプト:「.svn」ディレクトリを一括削除する(2015.03.23)
- JavaScript:excanvasを使ってWebページに画像を表示する(2012.05.07)
- C言語:TRUEとFALSEの値(2012.05.06)
- Java:CSVパーサを作る(その3) - RFC4180対応 後編(2008.06.13)
- Java:CSVパーサを作る(その2) - RFC4180対応 前編(2008.06.12)
「WebObjects」カテゴリの記事
- WebObjects:CSVレスポンスの実装(2008.03.16)
- WebObjects:メモリ不足エラー対応(2008.02.11)
- WebObjects:MySQLのためのEOModelの設定(2008.02.01)
- WebObjects:日本語の基本(2008.01.26)
- WebObjects:WOMailDeliveryで日本語メール送信(2008.01.23)
「Java」カテゴリの記事
- Java:Reader/Writerにおけるclose()メソッド呼び出しの流儀(2015.06.29)
- Java:例外が起こったときに実行されるコードとされないコード(2015.03.31)
- Java:前回作成したコードの処理速度を比較する(2015.03.15)
- Java:数値を3桁ごとのカンマ区切りの文字列にする(2015.03.02)
- Java:全角の数値文字列を数値として受け付ける(2015.01.19)