YKLook説明書 YKLook用アプリの応用 文字符号化方法 前へ   次へ
   

文字符号化方法


Ruby プログラムのソースファイル自体の文字符号化方法や、そのプログラムでの文字列処理について説明します。
Webアプリとして動作するときは、Webサーバ側のこのプログラムについての文字符号化方法を指します。
ブラウザ側の文字符号化方法は任意です。
サーバ側とブラウザ側で文字符号化方法が違っていても YKLook が自動的に解決します。



Ruby の文字符号化方法

YKLook用アプリの最初の一歩 > 最小のプログラム構成 にもあるとおり、文字符号化方法は Ruby プログラムの1行目で指定してください。
YKLook の内部では、これを Java 用のキーワードに変更してから各種処理をしています。

Ruby での指定 意味 Java での指定
-Ke EUC EUC_JP
-Ks シフトJIS SJIS
-Ku UTF−8 UTF8
-Kn 指定しない ISO8859_1
(いわゆる ASCII の上位互換)

YKLookMain クラスのメソッド yki_encoding() を実装・オーバーライドすると、この Java 指定を変更できます。
このメソッドは、Ruby プログラム起動時の -K オプションと Ruby 組み込み変数 $KCODE の挙動を補完するものです。
詳細は次項以降をご覧ください。


シフトJIS・マック

Mac OS X のシフトJISによる符号化は、互換性のない困ったシステム外字が存在します。
もしもこのようなシステム外字を利用しており、これに対応する必要があるときは、以下のように YKLookMain クラスのメソッド yki_encoding() を実装・オーバーライドしてください。

def yki_encoding()
    return 'YKLook_SJIS_Mac_KT7_X'
end

メソッド yki_encoding() の詳細については クラス解説 YKLookMain の説明をご覧ください。


この 'YKLook_SJIS_Mac_KT7_X' という指定は YKLook 組み込みの文字符号化方法で、Mac OS X に特有のシステム外字を 一般的な文字に置き換えることにより文字化けを防ぐためのものです。

'YKLook_SJIS_Mac_KT7_X' を指定してWebアプリとして起動するときは、 ブラウザで利用する YKLook ライブラリ( yklookfar.jar )について注意が必要です。
YKLook をダウンロードしたディレクトリの yklook の中に、 yklookfar.jar というファイルがありますが、これは 'YKLook_SJIS_Mac_KT7_X' という文字符号化の処理がありません。
その代わりに x-gaiji というディレクトリの中にある yklookfar.jar を使ってください。
こちらは 'YKLook_SJIS_Mac_KT7_X' という文字符号化の処理を含んでいます。
参考: YKLook用アプリの最初の一歩 > Webアプリとして起動・終了 → Webブラウザ用 jar ファイルの場所を確認


なお、Webブラウザではなくスタンドアロンで起動するときは、ライブラリに関する作業は必要ありません。


補足説明: 'YKLook_SJIS_Mac_KT7_X' という文字符号化方法は、その名前から推測できるとおり、Mac 漢字Talk7 から Mac OS X までのシステム外字に対応しています。
YKLook は Mac 漢字Talk6 のシステム外字にも対応しており、このときの文字符号化方法は YKLook_SJIS_Mac_KT6 になります。
しかし縦書き用文字を除けば、Mac 漢字Talk6 と MS-Windows はほぼ同じです。
次項をご覧ください。


シフトJIS・ウイン

MS-Windows のシフトJISによる符号化は、互換性のない困ったシステム外字が存在します。
もしもこのようなシステム外字を利用しており、これに対応する必要があるときは、以下のように YKLookMain クラスのメソッド yki_encoding() を実装・オーバーライドしてください。

def yki_encoding()
    return 'MS932'  # CP932 ではありません
end

メソッド yki_encoding() の詳細については クラス解説 YKLookMain の説明をご覧ください。


'MS932' の場合、前項のマックのようなライブラリに関する作業は必要ありません。


文字符号化方法の混在

YKLook では、Ruby プログラム起動時の -K オプションや前項で説明した yki_encoding() または Ruby 組み込み変数 $KCODE の値をもとに文字符号化の処理をしています。
YKLook のメソッドに文字列を渡すときの文字符号化方法は、必ずそれに合うものにしてください。
逆に言うと、この場合に限り、文字符号化方法を一致させてください。
YKLook のメソッドとは関係ない文字列の文字符号化方法は、プログラム製作者に任されています。


Ruby プログラムを複数のソースファイルに分けるとき、あるいは分かれているとき、すべてのソースファイルにおいて文字符号化方法を統一してください。
YKLook では、異なる文字符号化方法で記述された Ruby プログラムを混在して実行することはできません。


それぞれのプログラムソースの1行目には、必ず文字符号化方法のコマンドオプションを指定してください。
なぜなら、Ruby 構文チェック(ruby -c xxxx.rb)で誤動作することがあります。
とくに文字符号化方法がシフトJISのときに誤動作しやすいです。


他のライブラリとの整合性

文字符号化に関するライブラリのうち、 jcode はなるべく使わないでください。
このライブラリは Ruby 組み込みクラスのメソッドを上書きしています。
このようなやりかたは、アマチュア的には便利な場合もありますが プロフェッショナル的にはあまり好ましくない処理と言えます。

jcode の代わりに nkf のほうをお使いください。




   
YKLook説明書 YKLook用アプリの応用 文字符号化方法 前へ   次へ


Copyright (c) 2003-2010 YorozuKotowariYa Ltd.