C++ での Delphi AnsiString コード ページ指定の扱い方

提供: RAD Studio
移動先: 案内検索

C++Builder での Delphi 機能の取り扱い:インデックス への移動


AnsiString 型の C++ 実装には、Delphi で利用できるものに似た、CodePage サポート機能が提供されています。 ただし、Delphi 版は言語の拡張によって実装されているのに対し、C++ 版は次にように、型なしパラメータ codepage を取るテンプレートを介して実装されています:

template AnsiStringT<unsigned short codePage>

このため、これまで AnsiString 型と呼ばれていた型は、ここでは、単に新しい AnsiStringT テンプレートの型定義(typedef)となっています:

typedef AnsiStringT<65001> UTF8String;

typedef AnsiStringT<65535> RawByteString;

必要なコード ページで AnsiStringT を特化した型を、他にも宣言することができます。

AnsiStringT インスタンスに代入する場合はすべて、データはその型のコード ページにエンコードされます。 たとえば、以下のコードでは、UTF8String 型の変数に代入された Unicode データは自動的に UTF8 でエンコードされます。

const wchar_t* data = L"СЛАДКОЕ";
UTF8String utfs(data);

utfs 変数は UnicodeString を想定している関数に渡すことができ、以下のように、元のデータは損失なしに復元されます。

Button1->Caption = utfs; // Set button caption to "СЛАДКОЕ"

なお、codepage のサポートは AnsiStringT によって裏で処理されますが、次のメソッドを呼び出すことで、インスタンスのコード ページを明示的に設定することもできます:

AnsiStringT<CP>::SetCodePage(unsigned short codePage, bool convert=true)

ただし、インスタンスを使用する方は、デフォルトのコード ページでエンコードされたデータが型に入っていると誤解するおそれがあるため、このメソッドを使用する際には注意が必要です。

メモ: DefaultSystemCodePage は 0 です。

関連項目