0

たとえば、AnsiChar "A" があり、それを widechar に変換したいと思います (型キャストせずに!)。いくつかのメモリ操作について考えていましたが、WideChar (メモリ内) で AnsiChar がどのように見えるかわかりません。もしかしたら、WinAPI コマンドもあるのですか?

4

2 に答える 2

8

この変換を実行するために、Windows API 関数 MultiByteToWideChar が提供されています。当然、入力データのコードページを指定する必要があります。例えば:

function AnsiCharToWideChar(ac: AnsiChar; CodePage: UINT): WideChar;
begin
  if MultiByteToWideChar(CodePage, 0, @ac, 1, @Result, 1) <> 1 then
    RaiseLastOSError;
end;

ANSI コード ページで定義されているすべての文字は、Basic Multilingual Plane の Unicode 文字にマップされるため、単一の UTF-16 文字で表されることに注意してください。したがって、上記のコードのサイズの仮定。

ただし、あなたが作成していて、この答えが持続するという前提は、1 バイトが ANSI 文字セットの文字を表すということです。これは、1252 のような 1 バイトの西洋文字セットなど、多くの文字セットにとって有効な仮定です。しかし、2 バイト文字セットである 932 (日本語)、949 (Koren) などの文字セットがあります。あなたの全体的なアプローチと上記のコードは、それらのコードページに当てはまります。

于 2013-06-30T07:53:53.267 に答える