AFAIKSetThreadLocale
は現在のシステム コード ページを変更しないため、API 呼び出し、つまりシステム コード ページに依存する Delphi 7 でのwidestring
to変換には影響しません。ansistring
GetACP
システムのコード ページは、たとえば Windows Seven のコントロール パネルで設定し、[地域の言語] / [管理] タブ / 非 Unicode アプリケーションのコード ページで設定します。これには、システムの再起動が必要です。
Delphi 7 は、このシステム コード ページを使用して、すべての変換 API 呼び出しに 0 を提供します。そのため、 AFAIRは Delphi 7 のto変換にSetThreadLocale
は影響しません。システムが Ansi <-> Unicode 変換に使用するコード ページではなく、ロケール (日付/時刻や通貨の形式など) を変更します。widestring
ansistring
新しいバージョンの Delphi には、すべての処理SetMultiByteConversionCodePage()
に使用するコード ページを設定できる機能があります。AnsiString
ただし、API 呼び出し(つまり、Delphi 7 でマップされるWindows.pas....A()
のすべての関数)は、このシステム コード ページを使用します。したがって、別のコード ページを処理する場合は、Unicode への変換後にワイド API を呼び出す必要があります。つまり、Delphi 7 VCL は、 で指定された値ではなく、システム コード ページでのみ機能します。...()
...W()
SetThreadLocale
Delphi 7 での私のアドバイスは次のとおりです。
- どこでも使用
WideString
でき、特定の「ワイド」API 呼び出し - を処理する Delphi 7 用のコンポーネント セットがいくつかありWideString
ます。
- 専用の文字セットを使用して独自の型を使用しますが、VCL/RTL または「
MyString = type AnsiString
Ansi 」API 呼び出しを使用する前に明示的な変換が必要になります。RawUTF8
8 プロセス)。
AnsiString
Delphi 2009 以降では、すべての型にコード ページを指定し、API 呼び出しまたは VCL プロセスのために Unicode との間の変換を適切に処理できるため、これははるかに適切に処理されます。