Qtアプリケーションにおける言語エンコーディングの扱い
Qtアプリケーションでの言語エンコーディングの扱いについてのメ
モです。関連情報をご存知の方はぜひお知らせください。
QTextCodecの概要
Qtは文字列をUnicodeで扱います。Unicodeを格納するQStringクラス
を使っている限り、アプリケーションは基本的にどんな言語でも扱
う事ができます。
しかし、アプリケーションがファイルやネットワーク越しのテキス
ト情報を扱う場合、対象はUnicode以外の言語エンコーディングを利用
している場合があります(EUC-JPやSJIS等)。これを扱うための枠組とし
て、QtにはQTextCodecというクラスが用意されています。
QTextCodecは文字列のエンコーディング変換を扱う抽象クラスで、
各言語エンコーディングをサポートするために、以下のような派生クラ
スが用意されています。
- QEucJpCodec
- QSjisCodec
- QJisCodec
- QEucKrCodec
- ...
実際の利用は以下のような手順で行います。
- QTextCodecのstaticメンバ関数codecForName("eucJP"),
codecForLocale("ja_JP.SJIS")等を使って、目的のエンコーディング
を扱うQTextCodecのインスタンスを得る
- 生成したインスタンスに対してcodec->toUnicode(str),
codec->fromUnicode(str)といったメンバ関数を呼び出す
詳細はInternationalization
with Qtの"5. Support encodings."及びQTextCodec
Class Referenceを参照してください。
現行ザウルスでの扱い
LinuxザウルスではQt/Embedded 2.3.3(実体はlibqte.so)が採用されて
います。これはSL-A300, SL-5x00共通です。ただし、以下のような違い
があります。
- SL-A300
- SL-5500, SL-5000D
上記の違いに起因して、SL-5x00ではeucJPやSJISといった日本語エ
ンコーディングをQTextCodecで扱う事ができません。
しかし、コンパイル時の設定を変更する事により日本語エンコーディ
ングをサポートしたlibqte を作成する事ができます。そのようにして
作成されたのがlibqte-ja
です。ただし、製品に含まれるlibqteにはSHARPの手が入っているらし
く、完全な互換性は取れない恐れがあります。
libqte-jaによる解決では、以下のような問題点が発生します。
- OpenZaurus等の
ROMディストリビューションを直接利用する事ができない。libqte
の入れ換えが必要になるため。
Qt/Embedded次期バージョンでの扱い (注: 以下の記述内容は古くなっています。現状を反映していません)
既に公開されているQt/Embedded
3.0.5では、言語エンコーディングの扱いが改善されています。ソー
スを斜め読みした限りでは、以下のような特長を持っています。
- 日本語等のマイナーな言語のエンコーディングはプラグインとし
てコンパイルされる
- 日本語エンコーディングを含まない設定(QT_NO_CODECS)でコンパ
イルされたlibqteでも、プラグインにより各種日本語エンコーディン
グが利用可能(QT_NO_TEXTCODECSによってQTextCodecそのものを
libqte から排除していない限り)
上記の特長から、Qt/Embedded 3.0.5がザウルスに塔載されれば海外モ
デルでも問題無く日本語アプリケーションが利用できるようになるはず
です。が、問題はその時期です。当分先になるようであれば、現状の不
都合を解決するためlibqte-ja関連の作業に注力する必要があります。
協力者募集
関連情報をお持ちの方や、自分でもlibqteまわりをいじっている方はぜ
ひお知らせください。開発者の方はlinux-zaurusメーリングリ
ストへの参加をおすすめします。
Links
yamaken at bp.iij4u.or.jp
$Id: qt-language-encoding.html.ja,v 1.3 2003/04/18 16:42:53 yamaken Exp $