私の環境はi386上のUbuntu12.04Linuxです。/var/lib/locales/supported.d/local
UTF-8ロケールのみが(に)インストールされていることがわかります。
de_DE.UTF-8 UTF-8
en_US.UTF-8 UTF-8
~
今問題:
TIdIOHandler.InitComponentはTIdTextEncoding.Defaultを呼び出し、TIdTextEncoding.DefaultはTIdMBCSEncoding.Create('ASCII')を呼び出します。
そしてそこに、ライン
FMaxCharSize := GetByteCount(PWideChar(@cValue[0]), 2);
が実行され、GetByteCountがゼロを返します。これは発生しないはずです(ASCIIはシングルバイトエンコーディングであるため、期待値は1です)。
ゼロ値を返す場所は、IdGlobalの2288行目です。
if iconv(FFromUTF16, @LCharsPtr, @LCharCount, @LBytesPtr, {$IFNDEF KYLIX}@{$ENDIF}LByteCount) = size_t(-1) then
begin
Result := 0;
Exit;
end;
これは、UTF-16ロケールが欠落していることが原因である可能性がありますか?(最初の試みでUTF-16サポートのインストールに成功しませんでした。おそらく、この問題はLinux上の他のIndyユーザーにも見られました)