マスタリング バベル

1,123 views

Published on

文字エンコーディングの判定・変換ライブラリのバベルについて。

Boost.勉強会 #2 ( http://atnd.org/events/7148 )にて発表。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,123
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

マスタリング バベル

  1. 1. マスタリング バベル<br />Boost.勉強会 #2 ( 2010-09-11 )<br />
  2. 2. 概要<br />バベルってなに?<br />使い方<br />オプション<br />今後の課題<br />2<br />
  3. 3. バベルってなに?<br />マスタリング バベル<br />3<br />
  4. 4. バベルってなに?<br />文字エンコーディング変換モジュールです!<br />4<br />
  5. 5. バベルってなに?<br />文字エンコーディング変換モジュールです!<br />シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF-32)に対応していずれの組み合わせであろうと相互変換できます。<br />5<br />
  6. 6. バベルってなに?<br />文字エンコーディング変換モジュールです!<br />シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF-32)に対応していずれの組み合わせであろうと相互変換できます。<br />×国際化対応の為のものではありません!<br />国際化対応を前提とする場合、MLang, iconv, ICU あたりを推奨します。 <br />6<br />
  7. 7. バベルってなに?<br />真にフリーなライセンス<br />7<br />
  8. 8. バベルってなに?<br />真にフリーなライセンス<br />GPLみたいにうだうだ言いません!<br />8<br />
  9. 9. バベルってなに?<br />真にフリーなライセンス<br />GPLみたいにうだうだ言いません!<br />商用だろうが断りなく好き勝手に使って構いません!<br />9<br />
  10. 10. バベルってなに?<br />真にフリーなライセンス<br />GPLみたいにうだうだ言いません!<br />商用だろうが断りなく好き勝手に使って構いません!<br />オープンソースソフトウェアの一部としてソースファイル毎再配布しても構いません!<br />10<br />
  11. 11. バベルってなに?<br />強いて制限を挙げるなら…<br />11<br />
  12. 12. バベルってなに?<br />強いて制限を挙げるなら…<br />「バベルはワシが作った」とか言い出さないで。<br />第三者から俺が盗人呼ばわりされるのはさすがに勘弁!<br />12<br />
  13. 13. バベルってなに?<br />強いて制限を挙げるなら…<br />「バベルはワシが作った」とか言い出さないで。<br />第三者から俺が盗人呼ばわりされるのはさすがに勘弁!<br />万が一なにか問題があっても「自己責任」で。<br />俺に責任追及されてもそんなの知らん!<br />13<br />
  14. 14. バベルってなに?<br />高い文字エンコーディング判別精度<br />14<br />
  15. 15. バベルってなに?<br />高い文字エンコーディング判別精度<br />日本語限定だし、日本語文中に含まれる文字コードの出現率データを使っているので非常に高い文字エンコーディング判別精度を誇ります!<br />15<br />
  16. 16. バベルってなに?<br />高い移植性<br />16<br />
  17. 17. バベルってなに?<br />高い移植性<br />あの AIX 上ですらちゃんと動きます!<br />※ここ苦笑する所<br />17<br />
  18. 18. バベルってなに?<br />利用実績<br />18<br />
  19. 19. バベルってなに?<br />利用実績<br />具体的な数は残念ながらろくに把握できていませんが、フリーなライセンス、文字エンコーディング判別精度、高い移植性なんかのおかげで、かなり規模でご採用頂けているようです。<br />19<br />
  20. 20. 使い方<br />マスタリング バベル<br />20<br />
  21. 21. 使い方<br />まずバベルをここからダウンロードします!<br />http://tricklib.com/cxx/ex/babel/#download<br />※一番下の[バベル全ファイルZIPパック]がオススメ<br />21<br />
  22. 22. 使い方<br />次にダウンロードした各ファイルをバベルを利用するプログラムのソースファイルを置いているディレクトリにコピーします。<br />※babel.hと babel.cpp だけでなく*.csv, *.dat も同じディレクトリに一緒にコピーしてください。<br />22<br />
  23. 23. 使い方<br />babel.hを #include します。<br />23<br />#include "babel.h"<br />
  24. 24. 使い方<br />最初に初期化関数を呼び出します。<br />24<br />int main(...) {<br /> ...<br /> babel::init_babel();<br /> ...<br />}<br />
  25. 25. 使い方<br />文字エンコーディング変換関数を呼び出します。<br />25<br />void f()<br />{<br /> std::string source, destination;<br /> ...<br /> // 全自動変換<br /> destination = babel::auto_translate<>(source);<br />...<br /> // ShiftJIS->EUC変換<br /> destination = babel::sjis_to_euc(source);<br />}<br />変換関数の一覧:http://tricklib.com/cxx/ex/babel/#functions<br />
  26. 26. 使い方<br />あとは babel.cpp も他のソースコードと一緒にコンパイル・リンクもするだけ。<br />※具体的な方法はご使用のIDEやmakeなどの環境次第ですのでここでは説明しません。<br />26<br />
  27. 27. 使い方<br />ストリーム<br />27<br />using namespace babel;<br />void execute_translater(std::istream &input, std::ostream &output, bbl_translater<bbl_binary, bbl_binary> translater)<br />{<br />bbl_binarybuffer;<br />bbl_binarybuffer2;<br /> while(!input.eof())<br /> {<br />bbl_binary::value_type buffer3[1024];<br />input.read(buffer3, 1024);<br /> unsigned int size = input.gcount();<br />buffer.assign(buffer3, size);<br />translater<< buffer;<br />translater>> buffer2;<br /> output << buffer2;<br /> }<br />}<br />void f()<br />{<br /> …<br />execute_translater(std::ifstream(“src.txt”), std::cout, auto_translate_engine<bbl_string>::create());<br /> …<br />}<br />
  28. 28. オプション<br />マスタリング バベル<br />28<br />
  29. 29. オプション<br />大半のマクロ定義によるオプションは指定なしでもだいたいよしなに処理しますが多少効率の悪いコードになることもあるので面倒でなければ指定をしたほうがいいです。<br />29<br />
  30. 30. オプション<br />wchar_tのサイズ<br />__UNICODE_CHAR_SIZE_2__<br />__UNICODE_CHAR_SIZE_4__<br />× __UNICODE_CHAR_SIZE_UNKNOWN__<br />30<br />
  31. 31. オプション<br />エンディアン<br />__LITTLE_ENDIAN_COMPUTER__<br />__BIG_ENDIAN_COMPUTER__<br />× __UNKNOWN_ENDIAN_COMPUTER__<br />31<br />
  32. 32. オプション<br />処理系(コンパイラ)の文字エンコーディング<br />__USING_ANSI__<br />__USING_SJIS__<br />__USING_EUC__<br />__USING_UTF8__<br />× __USING_UNKNOWN__<br />32<br />
  33. 33. オプション<br />テーブルの形式<br />__BBL_USING_STATIC_TABLE__ ( default )<br />静的なテーブルを使用し、 babel::init_babel() の処理時間も非常に短くなります。<br />コンパイラに負荷をかける為、コンパイルできないことがあります。<br />※コンパイラのオプションで問題を回避できる場合もあり。<br />__BBL_USING_STDMAP_TABLE__<br />静的なテーブルの代りに std::map を使用し、 babel::init_babel() の処理時間も長くなり、メモリ消費量も増大します。<br />33<br />
  34. 34. オプション<br />SJIS⇔UNICODE変換で使用するマッピング<br />__BBL_USE_UNICODE_MAP_CP932__ ( default )<br />__BBL_USE_UNICODE_MAP_UTC__<br />__BBL_USE_UNICODE_MAP_APPLE__<br />34<br />
  35. 35. オプション<br />使用しないコードとデータの除去<br />__BBL_DISABLE_UNICODE__<br />__BBL_DISABLE_BINARY__<br />__BBL_DISABLE_UTF32__<br />※この指定だけは babel.hで始めから固定で定義されています。 UTF-32 の実装が必要な場合にこのマクロの #define を babel.hから削除してください。<br />__BBL_DISABLE_SELECTORS__<br />35<br />
  36. 36. 今後の課題<br />マスタリング バベル<br />36<br />
  37. 37. 今後の課題<br />マクロ名から連続したアンダースコアの除去<br />例: __BABEL_BABEL_H__ -> BABEL_BABEL_H<br />UTF-8 で本来無効なバイト列の無効化<br />絵文字対応<br />37<br />
  38. 38. 質疑応答<br />マスタリング バベル<br />38<br />
  39. 39. ご静聴ありがとうございました。<br />マスタリング バベル<br />

×