バベルは各種文字コード... シフトJIS, JIS, EUC, UNICODE(UTF8, UTF16, UTF32) ...を変換するモジュールです。
バベルでの変換は特に明記していない限り MS-Windows の IE をお手本にしています。
...こーゆー機能が欲しいとか、ここはこーした方がなどなどのご指摘があれば道化師までメールにてお伝えくださいまし。
下のリンクから全ファイルをダウンロード( babel.lzh(433KB) あるいは babel.zip(468KB) でまとめてダウンロードすることをオススメします。 )して、バベルを使用したいモジュール内で babel.h をインクルードし、babel.cpp をコンパイル&リンクするだけです。( *.csv および *.dat は babel.cpp 内でインクルードされます。) お手軽に組み込みたい場合は、babel.h の代わりに babel.cpp をインクルードするのもありです。(リンクする翻訳単位が複数ある場合、babel.cppをインクルードするのは全体で一度だけにしてください。)
■バベルモジュールの初期化 #include "babel.h" int main(...) { ... babel::init_babel(); ... } ■全自動変換 #include "babel.h" void f() { std::string source, destination; ... destination = babel::auto_translate<>(source); ... } ■ShiftJIS→EUC変換 #include "babel.h" void f() { std::string source, destination; ... destination = babel::sjis_to_euc(source); ... }
以下、編集中。
マクロの指定が面倒な場合は、babel.h 内で指定が楽なように予めコメントアウトした状態でマクロが記述されていますので、コメント記号を外して有効にしてください。記述されている箇所は「☆」で検索してください。
| マクロ名 | 種別 | 説明 |
|---|---|---|
| __BABEL_BABEL_H__ | 自動定義 | babel.h の重複インクルード対策の為に使用されています。 |
| __WITH_BABEL__ | バベル以外のモジュールに対しバベルが組み込まれていることを示す為に使用されます。バベルに対応しているモジュールを組み込む際にはこのマクロを定義することで、バベルと連携させてください。 | |
| __UNICODE_CHAR_SIZE_2__ | ユーザ定義 | sizeof(wchar_t) == 2 となる処理系ではこのマクロを定義してください。定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性があります。 |
| __UNICODE_CHAR_SIZE_4__ | ユーザ定義 | sizeof(wchar_t) == 4 となる処理系ではこのマクロを定義してください。定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性があります。 |
| __UNICODE_CHAR_SIZE_UNKNOWN__ | 自動定義 | __UNICODE_CHAR_SIZE_2__ も __UNICODE_CHAR_SIZE_4__ も定義されなかった際に自動定義されます。 |
| __LITTLE_ENDIAN_COMPUTER__ | ユーザ定義 | リトルエンディアンの環境下で使用する場合はこのマクロを定義してください。定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性があります。 |
| __BIG_ENDIAN_COMPUTER__ | ユーザ定義 | ビッグエンディアンの環境下で使用する場合はこのマクロを定義してください。定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性があります。 |
| __UNKNOWN_ENDIAN_COMPUTER__ | 自動定義 | __LITTLE_ENDIAN_COMPUTER__ も __BIG_ENDIAN_COMPUTER__ も定義されなかった際に自動定義されます。 |
| __USING_ANSI__ | ユーザ定義 | 処理系が日本語に対応していない場合にこのマクロを定義してください。定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性とベースエンコーディングを誤認する危険性があります。...ただし、実際には日本語に対応していない処理系ではバベルをまともにコンパイルすることはできないでしょう。 |
| __USING_SJIS__ | ユーザ定義 | 処理系が Shift_JIS ベースの場合にこのマクロを定義してください。定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性とベースエンコーディングを誤認する危険性があります。 |
| __USING_EUC__ | ユーザ定義 | 処理系が EUC-JP ベースの場合にこのマクロを定義してください。また、その際には Shift_JIS のテキストである babel.cpp 及び babel.h を予め EUC-JP のテキストに変換しておいてください。このマクロを定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性とベースエンコーディングを誤認する危険性があります。 |
| __USING_UTF8__ | ユーザ定義 | 処理系が UTF-8 ベースの場合(って、そんな処理系あんのか?)にこのマクロを定義してください。また、その際には Shift_JIS のテキストである babel.cpp 及び babel.h を予め UTF-8 のテキストに変換しておいてください。このマクロを定義しなくてもバベルは自動判別を行いますが、判別の為の余分なコードが生成される可能性とベースエンコーディングを誤認する危険性があります。 |
| __USING_UNKNOWN__ | 自動定義 | __USING_ANSI__, __USING_SJIS__, __USING_EUC__, __USING_UTF8__ のいずれも定義されなかった際に自動定義されます。 |
| __BBL_STRING_DEFAULT__ | このマクロが定義されると、文字列型をテンプレート引数とするテンプレートのデフォルトに babel::bbl_string が設定されます。__BBL_STRING_DEFAULT__ も __BBL_WSTRING_DEFAULT__ も定義されていなければ自動的に __BBL_STRING_DEFAULT__ が定義されます。 | |
| __BBL_WSTRING_DEFAULT__ | ユーザ定義 | このマクロが定義されると、文字列型をテンプレート引数とするテンプレートのデフォルトに babel::bbl_wstring が設定されます。__BBL_STRING_DEFAULT__ も __BBL_WSTRING_DEFAULT__ も定義されていなければ自動的に __BBL_STRING_DEFAULT__ が定義されます。 |
| __BBL_USING_STATIC_TABLE__ | このマクロが定義されると、各種マッピング(一部除く)を静的なテーブルで実装します。静的なテーブルを使用することで初期化の手間が省け babel::init_babel() の処理時間が非常に短くなりますが、コンパイラに負荷をかけるためコンパイラによっては正しく処理することができないかもしれません。コンパイルが通らない場合は、 __BBL_USING_STDMAP_TABLE__ を試して見て下さい。__BBL_USING_STATIC_TABLE__ も __BBL_USING_STDMAP_TABLE__ も定義されていなければ自動的に __BBL_USING_STATIC_TABLE__ が定義されます。 | |
| __BBL_USING_STDMAP_TABLE__ | ユーザ定義 | このマクロが定義されると、全マッピングを std::map で実装します。std::map にデータをロードする必要がある為 babel::init_babel() の処理時間が長くなり実行中のメモリ消費も __BBL_USING_STATIC_TABLE__ に比べかなり大きくなります。__BBL_USING_STATIC_TABLE__ も __BBL_USING_STDMAP_TABLE__ も定義されていなければ自動的に __BBL_USING_STATIC_TABLE__ が定義されます。 |
| __BBL_STRICT_TRANSLATE__ | このマクロが定義されると、EUC 及び JIS から SJIS への変換を UNICODE を経由して行います。UNICODE を経由することにより SJIS でも表現可能な一部の補助漢字を正しくマッピングします。ただし、UNICODE を経由する分処理速度は落ちます。 | |
| __BBL_LOAD_UNICODE_MAP_CP932__ | このマクロが定義されていると CP932 のマッピングを使用した SJIS⇔UNICODE 処理を実装します。 __BBL_USE_UNICODE_MAP_CP932__ が定義されている場合、このマクロは自動定義されます。 | |
| __BBL_LOAD_UNICODE_MAP_UTC__ | このマクロが定義されていると UTC のマッピングを使用した SJIS⇔UNICODE 処理を実装します。 __BBL_USE_UNICODE_MAP_UTC__ が定義されている場合、このマクロは自動定義されます。 | |
| __BBL_LOAD_UNICODE_MAP_APPLE__ | このマクロが定義されていると APPLE のマッピングを使用した SJIS⇔UNICODE 処理を実装します。 __BBL_USE_UNICODE_MAP_APPLE__ が定義されている場合、このマクロは自動定義されます。 | |
| __BBL_USE_UNICODE_MAP_CP932__ | このマクロが定義されているとデフォルトの SJIS⇔UNICODE 変換処理として CP932 のマッピングを使用した処理が設定されます。__BBL_USE_UNICODE_MAP_CP932__, __BBL_USE_UNICODE_MAP_UTC__, __BBL_USE_UNICODE_MAP_APPLE__ のいずれも定義されていない場合、このマクロが自動定義されます。 | |
| __BBL_USE_UNICODE_MAP_UTC__ | ユーザ定義 | このマクロが定義されているとデフォルトの SJIS⇔UNICODE 変換処理として UTC のマッピングを使用した処理が設定されます。 |
| __BBL_USE_UNICODE_MAP_APPLE__ | ユーザ定義 | このマクロが定義されているとデフォルトの SJIS⇔UNICODE 変換処理として APPLE のマッピングを使用した処理が設定されます。 |
| __BBL_DISABLE_UNICODE__ | ユーザ定義 | UNICODE 関連の実装を拒否したい場合にこのマクロを定義してください。 |
| __BBL_DISABLE_BINARY__ | UTF-16, UTF-32 入出力関連の実装を拒否したい場合にこのマクロを定義してください。__BBL_DISABLE_UNICODE__ が定義された場合、このマクロは自動定義されます。 | |
| __BBL_DISABLE_UTF32__ | UTF-32 関連の実装を拒否したい場合にこのマクロを定義してください。__BBL_DISABLE_UNICODE__ あるいは __BBL_DISABLE_BINARY__ が定義された場合、このマクロは自動定義されます。現状では UTF-32 に対応しているソフトを見かけないので実装しても蛇足になるだけだと思われるので、実際にはデフォルトで babel.h にて定義しています。UTF-32 に対応させたい場合はその定義をコメントアウトしてください。 | |
| __BBL_DISABLE_SELECTORS__ | translate_to_string-, auto_translate-, translate_to_binary-, manual_translate- ... 以上のクラス、関数の実装を拒否したい場合にこのマクロを定義してください。 | |
| __BBL_USE_UNICODE__ | 自動定義 | __BBL_DISABLE_UNICODE__ が定義されなかった場合に自動定義されます。 |
| __BBL_USE_BINARY__ | 自動定義 | __BBL_DISABLE_BINARY__ が定義されなかった場合に自動定義されます。 |
| __BBL_USE_UTF32__ | 自動定義 | __BBL_DISABLE_UTF32__ が定義されなかった場合に自動定義されます。 |
| __BBL_USE_SELECTORS__ | 自動定義 | __BBL_DISABLE_SELECTORS__ が定義されなかった場合に自動定義されます。 |
babel::base_encoding
| 型名 | 説明 |
|---|---|
| babel::base_encoding::unknown | 不明なエンコーディング。 |
| babel::base_encoding::ansi | ANSI。 |
| babel::base_encoding::sjis | シフトJIS。 |
| babel::base_encoding::jis | JIS(半角カナ可)。 |
| babel::base_encoding::euc | EUC。 |
| babel::base_encoding::iso2022jp | ISO-2022-JP。 |
| babel::base_encoding::utf8 | UTF-8。 |
| babel::base_encoding::utf16be | UTF-16BE。 |
| babel::base_encoding::utf16le | UTF-16LE。 |
| babel::base_encoding::utf32be | UTF-32BE。 |
| babel::base_encoding::utf32le | UTF-32LE。 |
| babel::base_encoding::unicode | UNICODE。バイナリ出力のエンコーディングとしてこの値が指定された場合は、UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE の中から環境に応じてもっとも処理コストの低いエンコーディングで出力されます。 |
| babel::base_encoding::utf16 | UTF-16。バイナリ出力のエンコーディングとしてこの値が指定された場合は、UTF-16BE, UTF-16LE の中から環境に応じてもっとも処理コストの低いエンコーディングで出力されます。 |
| babel::base_encoding::utf32 | UTF-32。バイナリ出力のエンコーディングとしてこの値が指定された場合は、UTF-32BE, UTF-32LE の中から環境に応じてもっとも処理コストの低いエンコーディングで出力されます。。 |
| 型名 | 元型 | 説明 |
|---|---|---|
| babel::bbl_binary | std::string | バイナリデータを扱うのに使用されます。この型は std::string のエイリアスとして定義されています。 |
| babel::bbl_string | std::string | char ベースの文字列を扱うのに使用されます。この型は std::string のエイリアスとして定義されています。この型で扱われるのは UNICODE 以外の文字列と UTF-8 文字列です。 |
| babel::bbl_wstring | std::wstring | wchar_t ベースの文字列を扱うのに使用されます。この型は std::wstring のエイリアスとして定義されています。この型で扱われるのは UNICODE 文字列のみです。 |
| クラス名 | 親クラス | 説明 |
|---|---|---|
| babel::bbl_demi | - | クラス化関数基本クラステンプレートとして使用しています。関数テンプレートではデフォルトのテンプレート引数を設定できないので、用途としては関数テンプレートなのですがクラステンプレートにすることでデフォルトのテンプレート引数の設定を可能にしています。 cf. http://www.tietew.jp/cppll/archive/67, http://www.tietew.jp/cppll/archive/167 |
| babel::bbl_smart_base | - | バベルで使用されているスマートポインタの Body 側の基本クラスです。 |
| babel::bbl_smart_shell | - | バベルで使用されているスマートポインタの Handle 側の基本クラスです。 |
| babel::bbl_translate_engine | babel::bbl_smart_base | 各種変換処理が実装されているクラスの親クラスです。 |
| babel::dull_engine | babel::bbl_translate_engine | なにも変換処理を行わないトランスレータエンジンです。babel::through_engine と違いなにも変換結果を返しません。 |
| babel::through_engine | babel::bbl_translate_engine | なにも変換処理を行わないトランスレータエンジンです。babel::dull_engine と違い変換元文字列をそのまま変換結果として返します。 |
| babel::twin_translate_engine | babel::bbl_translate_engine | 二つのトランスレータエンジンを合成し、一つのトランスレータエンジンにするクラステンプレートです。 |
| babel::bbl_translater | - | トランスレータエンジンの器です。各トランスレータエンジンのスタティックメンバ関数を除くデータメンバ及びメンバ関数は全てこのクラスを通して行うことになります。 |
トランスレータエンジン( babel::bbl_translate_engine を継承するクラス )のメンバ関数
| メンバ名 | 種別 | 説明 |
|---|---|---|
| create | クラスのインスタンスを作成します。トランスレータエンジンのオブジェクトはこの関数で取得してください。なお、トランスレータエンジンのオブジェクトは裸で晒されることはなく、実際には babel::bbl_translate でラップされた状態で返されます。 | |
| ignite | (スタック上にクラスのインスタンスを作成し)変換処理を実行します。単発の変換処理を行う場合にはこの関数をご利用ください。ヒープにクラスのインスタンスを作成せず(とは言っても、内部で使用している文字列クラスがヒープを利用するでしょうが)、スマートポインタの処理も省かれるので若干速度的に優れます。 | |
| translate | 仮想メンバ関数 | 基本的にこのメンバ関数が babel::bbl_translate クラス以外から直接呼び出されることはありません。このメンバ関数が実際に変換処理を行う関数となります。 |
| flush | 仮想メンバ関数 | 基本的にこのメンバ関数が babel::bbl_translate クラス以外から直接呼び出されることはありません。このメンバ関数は traslate メンバ関数の補助的な立場の関数で、traslate メンバ関数が(続きのデータが送られるまで)処理を保留しているデータを強制的に処理します。(多くは無効な文字として処理されることになります。) |
| clear | 仮想メンバ関数 | 基本的にこのメンバ関数が babel::bbl_translate クラス以外から直接呼び出されることはありません。このメンバ関数は変換元バッファと変換済バッファを初期化します。 |
babel::bbl_translate クラスのメンバ関数
| メンバ名 | 種別 | 説明 |
|---|---|---|
| translate | トランスレータエンジンの変換元バッファにデータをセットし、トランスレータエンジンの translate メンバ関数を呼び出します。 | |
| flush | トランスレータエンジンの flush メンバ関数を呼び出します。 | |
| clear | トランスレータエンジンの clear メンバ関数を呼び出します。 |
| 関数名 | 種別 | 説明 |
|---|---|---|
| babel::init_babel | バベルの初期化を行います、必ず最初に一度だけ呼び出しておいてください。現バージョンでは対になる終了関数は存在しません。 | |
| babel::analyze_base_encoding | 分析 | どのエンコーディングの文字列なのかを分析します。 |
| babel::manual_translate | 変換 | 指定されたエンコーディング間の変換を行います。UNICODEと非UNICODE間の変換においてBOMの付加/除去は行いません。 |
| babel::translate_to_string | 変換 | バイナリデータを元に指定されたエンコーディング間の変換を行い、変換された文字列を返します。UNICODEと非UNICODE間の変換においてはBOMの付加/除去を行います。 |
| babel::auto_translate | 変換 | バイナリデータを元に自動でエンコーディングの分析をしたうえで変換を行い、変換された文字列を返します。UNICODEと非UNICODE間の変換においてはBOMの付加/除去を行います。 |
| babel::translate_to_binary | 変換 | 文字列データを元に指定されたエンコーディング間の変換を行い、変換されたバイナリデータを返します。UNICODEと非UNICODE間の変換においてはBOMの付加/除去を行います。 |
| babel::sjis_to_euc | 変換 | シフトJISからEUCへの変換を行います。 |
| babel::sjis_to_jis | 変換 | シフトJISからJIS(半角カナ可)への変換を行います。 |
| babel::sjis_to_utf8 | 変換 | シフトJISからUTF-8への変換を行います。 |
| babel::sjis_to_unicode | 変換 | シフトJISからUNICODE(wchar_tベース)への変換を行います。 |
| babel::euc_to_sjis | 変換 | EUCからシフトJISへの変換を行います。 |
| babel::euc_to_jis | 変換 | EUCからJIS(半角カナ可)への変換を行います。 |
| babel::euc_to_utf8 | 変換 | EUCからUTF-8への変換を行います。 |
| babel::euc_to_unicode | 変換 | EUCからUNICODE(wchar_tベース)への変換を行います。 |
| babel::jis_to_sjis | 変換 | JIS(半角カナ可)からシフトJISへの変換を行います。 |
| babel::jis_to_euc | 変換 | JIS(半角カナ可)からEUCへの変換を行います。 |
| babel::jis_to_utf8 | 変換 | JIS(半角カナ可)からUTF-8への変換を行います。 |
| babel::jis_to_unicode | 変換 | JIS(半角カナ可)からUNICODE(wchar_tベース)への変換を行います。 |
| babel::jis_to_iso2022jp | 変換 | JIS(半角カナ可)からISO-2022-JP(半角カナ不可)への変換を行います。変換元文字列に半角カナが含まれている場合、全角カナに置換されます。 |
| babel::utf8_to_sjis | 変換 | UTF-8からシフトJISへの変換を行います。 |
| babel::utf8_to_euc | 変換 | UTF-8からEUCへの変換を行います。 |
| babel::utf8_to_jis | 変換 | UTF-8からJIS(半角カナ可)への変換を行います。 |
| babel::utf8_to_unicode | 変換 | UTF-8からUNICODE(wchar_tベース)への変換を行います。 |
| babel::unicode_to_sjis | 変換 | UNICODE(wchar_tベース)からシフトJISへの変換を行います。 |
| babel::unicode_to_euc | 変換 | UNICODE(wchar_tベース)からEUCへの変換を行います。 |
| babel::unicode_to_jis | 変換 | UNICODE(wchar_tベース)からJIS(半角カナ可)への変換を行います。 |
| babel::unicode_to_utf8 | 変換 | UNICODE(wchar_tベース)からUTF-8への変換を行います。 |
SJIS⇔UNICODEのマッピングと一口に言ってもシフトJIS自体に多くのバリエーションが存在するために実際にはいろんな種類のマッピングが存在します。バベルではデフォルトで MS-Windows で使用されているマッピング(CP932)と同じマッピングを適用します。また、バベルは UTC が提唱しているマッピング、アップルが公表しているマッピングにも対応しています。UTCとアップルのマッピングではシフトJIS上の "\"(0x5C) が 0x00A5 に割り当てられていたりしますのでご注意ください。
アップルのマッピングではシフトJIS上では1文字のコードに対し複数ワード(って、表現であってる?)の文字が割り当てられていたりもしますのでこれも注意が必要です。恐らくこの複数ワードの文字はアップルのマシン以外で正常に表示されることは(少なくとも現状では)ないと思います。
UTC のマッピングでは半角カナの部分が存在しない為、バベルでは便宜上 CP932 の半角カナのマッピングをコピーして補っています。
その他のマッピング(各種JAVAで使用されているものなど)が必要な場合は適宜、CP932, UTC, APPLE の中から似ているマッピングを元に自作してください。
今現在はFAQを用意していません。バベルでよくわからないことがありましたら道化師までメールください。