マスタリング バベル
Upcoming SlideShare
Loading in...5
×
 

マスタリング バベル

on

  • 1,064 views

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

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

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

Statistics

Views

Total Views
1,064
Views on SlideShare
1,064
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

マスタリング バベル マスタリング バベル Presentation Transcript

  • マスタリング バベル
    Boost.勉強会 #2 ( 2010-09-11 )
  • 概要
    バベルってなに?
    使い方
    オプション
    今後の課題
    2
  • バベルってなに?
    マスタリング バベル
    3
  • バベルってなに?
    文字エンコーディング変換モジュールです!
    4
  • バベルってなに?
    文字エンコーディング変換モジュールです!
    シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF-32)に対応していずれの組み合わせであろうと相互変換できます。
    5
  • バベルってなに?
    文字エンコーディング変換モジュールです!
    シフトJIS,JIS,EUC,UNICODE(UTF-8,UTF-16,UTF-32)に対応していずれの組み合わせであろうと相互変換できます。
    ×国際化対応の為のものではありません!
    国際化対応を前提とする場合、MLang, iconv, ICU あたりを推奨します。 
    6
  • バベルってなに?
    真にフリーなライセンス
    7
  • バベルってなに?
    真にフリーなライセンス
    GPLみたいにうだうだ言いません!
    8
  • バベルってなに?
    真にフリーなライセンス
    GPLみたいにうだうだ言いません!
    商用だろうが断りなく好き勝手に使って構いません!
    9
  • バベルってなに?
    真にフリーなライセンス
    GPLみたいにうだうだ言いません!
    商用だろうが断りなく好き勝手に使って構いません!
    オープンソースソフトウェアの一部としてソースファイル毎再配布しても構いません!
    10
  • バベルってなに?
    強いて制限を挙げるなら…
    11
  • バベルってなに?
    強いて制限を挙げるなら…
    「バベルはワシが作った」とか言い出さないで。
    第三者から俺が盗人呼ばわりされるのはさすがに勘弁!
    12
  • バベルってなに?
    強いて制限を挙げるなら…
    「バベルはワシが作った」とか言い出さないで。
    第三者から俺が盗人呼ばわりされるのはさすがに勘弁!
    万が一なにか問題があっても「自己責任」で。
    俺に責任追及されてもそんなの知らん!
    13
  • バベルってなに?
    高い文字エンコーディング判別精度
    14
  • バベルってなに?
    高い文字エンコーディング判別精度
    日本語限定だし、日本語文中に含まれる文字コードの出現率データを使っているので非常に高い文字エンコーディング判別精度を誇ります!
    15
  • バベルってなに?
    高い移植性
    16
  • バベルってなに?
    高い移植性
    あの AIX 上ですらちゃんと動きます!
    ※ここ苦笑する所
    17
  • バベルってなに?
    利用実績
    18
  • バベルってなに?
    利用実績
    具体的な数は残念ながらろくに把握できていませんが、フリーなライセンス、文字エンコーディング判別精度、高い移植性なんかのおかげで、かなり規模でご採用頂けているようです。
    19
  • 使い方
    マスタリング バベル
    20
  • 使い方
    まずバベルをここからダウンロードします!
    http://tricklib.com/cxx/ex/babel/#download
    ※一番下の[バベル全ファイルZIPパック]がオススメ
    21
  • 使い方
    次にダウンロードした各ファイルをバベルを利用するプログラムのソースファイルを置いているディレクトリにコピーします。
    ※babel.hと babel.cpp だけでなく*.csv, *.dat も同じディレクトリに一緒にコピーしてください。
    22
  • 使い方
    babel.hを #include します。
    23
    #include "babel.h"
  • 使い方
    最初に初期化関数を呼び出します。
    24
    int main(...) {
    ...
    babel::init_babel();
    ...
    }
  • 使い方
    文字エンコーディング変換関数を呼び出します。
    25
    void f()
    {
    std::string source, destination;
    ...
    // 全自動変換
    destination = babel::auto_translate<>(source);
    ...
    // ShiftJIS->EUC変換
    destination = babel::sjis_to_euc(source);
    }
    変換関数の一覧:http://tricklib.com/cxx/ex/babel/#functions
  • 使い方
    あとは babel.cpp も他のソースコードと一緒にコンパイル・リンクもするだけ。
    ※具体的な方法はご使用のIDEやmakeなどの環境次第ですのでここでは説明しません。
    26
  • 使い方
    ストリーム
    27
    using namespace babel;
    void execute_translater(std::istream &input, std::ostream &output, bbl_translater<bbl_binary, bbl_binary> translater)
    {
    bbl_binarybuffer;
    bbl_binarybuffer2;
    while(!input.eof())
    {
    bbl_binary::value_type buffer3[1024];
    input.read(buffer3, 1024);
    unsigned int size = input.gcount();
    buffer.assign(buffer3, size);
    translater<< buffer;
    translater>> buffer2;
    output << buffer2;
    }
    }
    void f()
    {

    execute_translater(std::ifstream(“src.txt”), std::cout, auto_translate_engine<bbl_string>::create());

    }
  • オプション
    マスタリング バベル
    28
  • オプション
    大半のマクロ定義によるオプションは指定なしでもだいたいよしなに処理しますが多少効率の悪いコードになることもあるので面倒でなければ指定をしたほうがいいです。
    29
  • オプション
    wchar_tのサイズ
    __UNICODE_CHAR_SIZE_2__
    __UNICODE_CHAR_SIZE_4__
    × __UNICODE_CHAR_SIZE_UNKNOWN__
    30
  • オプション
    エンディアン
    __LITTLE_ENDIAN_COMPUTER__
    __BIG_ENDIAN_COMPUTER__
    × __UNKNOWN_ENDIAN_COMPUTER__
    31
  • オプション
    処理系(コンパイラ)の文字エンコーディング
    __USING_ANSI__
    __USING_SJIS__
    __USING_EUC__
    __USING_UTF8__
    × __USING_UNKNOWN__
    32
  • オプション
    テーブルの形式
    __BBL_USING_STATIC_TABLE__ ( default )
    静的なテーブルを使用し、 babel::init_babel() の処理時間も非常に短くなります。
    コンパイラに負荷をかける為、コンパイルできないことがあります。
    ※コンパイラのオプションで問題を回避できる場合もあり。
    __BBL_USING_STDMAP_TABLE__
    静的なテーブルの代りに std::map を使用し、 babel::init_babel() の処理時間も長くなり、メモリ消費量も増大します。
    33
  • オプション
    SJIS⇔UNICODE変換で使用するマッピング
    __BBL_USE_UNICODE_MAP_CP932__ ( default )
    __BBL_USE_UNICODE_MAP_UTC__
    __BBL_USE_UNICODE_MAP_APPLE__
    34
  • オプション
    使用しないコードとデータの除去
    __BBL_DISABLE_UNICODE__
    __BBL_DISABLE_BINARY__
    __BBL_DISABLE_UTF32__
    ※この指定だけは babel.hで始めから固定で定義されています。 UTF-32 の実装が必要な場合にこのマクロの #define を babel.hから削除してください。
    __BBL_DISABLE_SELECTORS__
    35
  • 今後の課題
    マスタリング バベル
    36
  • 今後の課題
    マクロ名から連続したアンダースコアの除去
    例: __BABEL_BABEL_H__ -> BABEL_BABEL_H
    UTF-8 で本来無効なバイト列の無効化
    絵文字対応
    37
  • 質疑応答
    マスタリング バベル
    38
  • ご静聴ありがとうございました。
    マスタリング バベル