我的环境是 i386 上的 Ubuntu 12.04 Linux。我可以看到只安装了 UTF-8 语言环境(在 中/var/lib/locales/supported.d/local
):
de_DE.UTF-8 UTF-8
en_US.UTF-8 UTF-8
~
现在的问题:
TIdIOHandler.InitComponent 调用 TIdTextEncoding.Default ,后者又调用TIdMBCSEncoding.Create('ASCII')。
在那里,这条线
FMaxCharSize := GetByteCount(PWideChar(@cValue[0]), 2);
执行,并且 GetByteCount 返回零 - 这不应该发生(预期值为 1,因为 ASCII 是单字节编码)。
返回零值的地方是 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 用户也看到了这个问题)