を使用して文字列を変換しようとしています
Var
encode:ansistring;
begin
encode:=UTF8Encode('اختبار');
showmessage(encode);
end;
Delphi7では正常に機能しています
ただし、Delphi XE2では、テキストを疑問符として送信します
助言がありますか?
を使用して文字列を変換しようとしています
Var
encode:ansistring;
begin
encode:=UTF8Encode('اختبار');
showmessage(encode);
end;
Delphi7では正常に機能しています
ただし、Delphi XE2では、テキストを疑問符として送信します
助言がありますか?
Delphi 7コードでは、おそらく次のようなものを書いています。
var
UTF8: string;
InputString: WideString;//I guess that you used WideString
.....
UTF8 := UTF8Encode(InputString);
これstring
は、のエイリアスであるDelphi7では問題ありませんでしAnsiString
た。XE2では、ジェネリック型はUTF-16でエンコードされstring
たエイリアスになりました。UnicodeString
つまり、上記のコードがXE2によってコンパイルされると、によって返されるUTF-8でエンコードされたバッファーはUTF8Encode
UTF-16でエンコードされたテキストとして解釈されます。そして、その不一致は、疑問符でいっぱいの文字列につながるものです。
だから、あなたが書いたばかりなら
var
UTF8: AnsiString;
InputString: string;//aliased to UnicodeString
.....
UTF8 := UTF8Encode(InputString);
そうすれば、Delphi7コードの場合と同じ動作になります。
ただし、これはUnicodeDelphiでそれを行う方法ではありません。代わりに、UTF8String
タイプを使用する必要があります。これは、コードページ(UTF-8コードページ)AnsiString(65001)
を含む8ビット文字単位の文字列を意味するものとして定義されます。65001
これを行う場合UTF8Encode
、文字列タイプに付加されたエンコーディングは、コンパイラが文字列を変換するコードを生成できることを意味するため、呼び出す必要はまったくありません。今、あなたは単に書くでしょう:
var
UTF8: UTF8String;
InputString: string;//aliased to UnicodeString
.....
UTF8 := InputString;
Delphi 2009以降のUnicodeの側面に関する主な参考資料は、MarcoCantùのホワイトペーパー「DelphiとUnicode」です。先に進む前に読むことをお勧めします。