2

Ansi 文字列に切り捨てるのではなく、Indy が Utf-8 文字列を返すようにするために特定の方法で設定する必要があるコンパイラ ディレクティブまたはプリプロセッサ コマンドはありますか? 私が取り組んでいるプロジェクトには、問題があれば、あらゆる種類の Delphi モード フラグがあります。

件名行を直接 UTF-8 文字列 (以下のように) に設定すると、GUI 上で正しく表示されるため、utf-8 サポートが正しく設定され、適切なフォントとすべての優れた機能を使用しています。このコードでは、わかりやすくするために、サブジェクトは Utf8String として宣言されています。

MailItem.Subject := 'îņŢëŕŃïóЙǟŁ ŜũƥĵεϿד'; //Displays correctly

ただし、ヘッダーから同じ件名を取り出し、Indy を使用してデコードすると、すべての国際文字が正確に 1 つの疑問符 (本来あるべき文字数) に置き換えられます。UTF-8 を ANSI に変換しているように見えますが、これは私が望んでいるものではありません。

MailItem.Subject := IdCoderHeader.DecodeHeader('=?utf-8?B?w67FhsWiw6vFlcWDw6/Ds9CZx5/FgSDFnMWpxqXEtc61z7/Xkw==?='); //Displays '?????????? ???????'

では、何が問題になっている可能性があり、どのように修正できますか?

私は Indy の Web サイトから入手した最新バージョンの Indy10 と Windows で Lazarus 1.0 を使用しているため、これは「ソフトウェアの更新が必要」というバグではなく、おそらく何らかの構成の問題だと思います。

4

1 に答える 1

0

いいえ、そのために設定できるコンパイラ フラグはありません。

Indy はAnsiString、D2009 より前の Delphi と 3.0 より前の FreePascal で使用しています。Indy はUnicodeString、Delphi 2009+ および FreePascal 3.0+ で使用します。それを変更するオプションはありません。

AnsiStringただし、Delphi と FreePascal の非 Unicode バージョンでは、Indy の一部の場所で、入力値を UTF-8 として解釈し、UTF-8 でエンコードされた出力を返すように Indy に指示できAnsiStringます。しかし、DecodeHeader()それらの場所の 1 つではありません。

于 2012-10-10T19:08:33.050 に答える