【发布时间】:2012-07-26 10:03:21
【问题描述】:
我的环境是 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 用户也看到了这个问题)
【问题讨论】:
-
你检查过errno的值吗? gnu.org/savannah-checkouts/gnu/libiconv/documentation/…
-
@JensMühlenhoff 还没有,非常感谢您的提示! (我明天试试)
标签: linux delphi indy freepascal iconv