エンコード文字列 更新

相変わらずUTF-8に注力して作っていますが、以下の機能を追加しました:

  • 部分文字列を取得する、codeunit_substr()メンバ関数を追加
  • UTF-8文字列中の文字もまた、UTF-8の文字列にした。
  • 出力ストリーム演算子を追加。システムの文字コードで出力するので、WindowsでUTF-8文字列を出力する場合は、CP932で出力する。ファイルに出力するような場合には、c_str()を使うこと。
  • UTF-8文字列が代入された時点で、BOMを削除するようにした。

ソースコード

#include <iostream>
#include <shand/encoding_string.hpp>

int main()
{
    using namespace shand;

    const encoding_string<encoding::utf8> s = u8"あいうえお";

    // 出力ストリーム
    std::cout << s << std::endl; // "あいうえお"

    // 部分文字列の取得
    std::cout << s.codeunit_substr(2, 3) << std::endl; // "うえお"
    std::cout << s.codeunit_substr(2) << std::endl; // "うえお"

    // UTF-8文字もまたUTF-8文字列
    encoding_string<encoding::utf8> at = s.codeunit_at(2);
    std::cout << at << std::endl; // "う"
}
あいうえお
うえお
うえお
う

今後の実装予定:

  • Unicodeの正規化
    • 自前実装は無理っぽいことがわかったので、どこかの実装に移譲する方針にしようと思っています。とりあえず、WindowsはNormalizeString()というAPIがあったので、それで実装しておきました。他の環境は考え中。libiconvはGPLなので、採用できなさそう。
  • Unicodeのコードポイント値をダンプする。
  • ステートフルアロケータ