1

对于使用 Internet Direct (Indy) 的跨平台开发,启用iconv支持而不是特定于操作系统的 Windows 字符转换可能很有用。

这将允许在 Delphi IDE 中继续在 Windows 上开发和测试代码,但仍然能够在不同平台上编译代码之前找到与转换相关的问题。

Indy 10 已经包含在 Linux 和 Windows 上使用 iconv API 的代码。

在 Windows 上,需要一些准备工作:

  • 将 iconv API DLL 复制到应用文件夹或搜索路径
  • 定义use_iconv条件符号

这个问题的目的是帮助在 Windows 平台上开始使用 iconv。

4

2 回答 2

0

如果我快速浏览一下我在gettext for windows sourceforge project中找到的 iconv.h ,并且如果我正确理解了 C 代码,那么 iconv.dll 的包装单元可能看起来像这样,并且可以用于输入和印地组件的输出。

unit iconv;

interface

//based on version 1.9.1 https://sourceforge.net/projects/gettext/

type
  TIconv = pointer;

function iconv_open(const PAnsiChar:tocode; const PAnsiChar:fromcode): TIconv; cdecl;
function iconv(cd:TIconv; var inbuf:PAnsiChar; var inbytesleft:integer; var output:PAnsiChar; var outbytesleft:integer): integer; cdecl;
function iconv_close(cd:TIconv): integer; cdecl;

const
  ICONV_TRIVIALP            =0;  // int *argument
  ICONV_GET_TRANSLITERATE   =1;  // int *argument
  ICONV_SET_TRANSLITERATE   =2;  // const int *argument
  ICONV_GET_DISCARD_ILSEQ   =3;  // int *argument
  ICONV_SET_DISCARD_ILSEQ   =4;  // const int *argument

type
  TiconvlistDoOne=function(namescount:cardinal; const names:PAnsiChar; data:pointer): integer; cdecl;

function iconvctl(cd:TIconv; request:integer; argument:pointer): integer; cdecl;
procedure iconvlist(do_one:TiconvlistDoOne; data:pointer); cdecl;
procedure libiconv_set_relocation_prefix(const orig_prefix:PAnsiChar; const curr_prefix:PAnsiChar); cdecl;

implementation

function iconv_open; external 'iconv.dll';
function iconv; external 'iconv.dll';
function iconv_close; external 'iconv.dll';
function iconvctl; external 'iconv.dll';
procedure iconvlist; external 'iconv.dll';
procedure libiconv_set_relocation_prefix; external 'iconv.dll';

end.
于 2013-01-03T14:30:57.627 回答
0

Free Pascal 有一个 iconv 头文件(包 iconvenc),它要么与 delphi 兼容,要么应该很容易更新。从FPC websvn 接口模块 iconvenc或最新的 RC (2.6.2rc1) 获取它,因为它可能从 2.6.0 年开始更新。

但它比仅仅提供标头更复杂,因为 windows 上的 iconv 不支持 errno,因此无法处理 EILSEQ 和 EI2BIG,因此您需要预先正确分配内存(如 4*charsize)。

我得到了如何处理非 errno iconv 目标PHP的代码,但它还没有经过很好的测试。(见 src/iconvert.inc)

于 2013-01-03T14:52:35.580 回答