函数

GLibconvert_with_iconv

声明 [源代码]

gchar*
g_convert_with_iconv (
  const gchar* str,
  gssize len,
  GIConv converter,
  gsize* bytes_read,
  gsize* bytes_written,
  GError** error
)

描述 [源代码]

将某字符串从一个字符集转换成另一个字符集。

请注意,应使用 g_iconv() 进行流式转换。尽管 bytes_read 可以返回有关部分字符的信息,g_convert_… 函数一般不适用于流式转换。如果底层转换器保留内部状态,则在对 g_convert()、g_convert_with_iconv() 或 g_convert_with_fallback() 连续调用期间不会保留此状态。(一个示例是 GNU C 转换器,用于 CP1255,该转换器在得知下一个字符不是可与基础字符组合的标记之前不会发出基础字符。)

有效性字符集中存在但表示形式缺失的字符将导致 G_CONVERT_ERROR_ILLEGAL_SEQUENCE 错误。这不同于 iconv() 说明,其将此行为留给实现来规定。需要注意,此错误代码也是输入字符集中无效字节序列返回的错误代码。要实现不可表示字符转换的定义行为,请使用 g_convert_with_fallback()。

此函数不直接可用于语言绑定。

参数

str

类型:guint8 数组

            the string to convert.
数组长度在 len 参数中指定。
数据由函数调用方所有。
len

类型:gssize

字符串长度(单位为字节),如果字符串以空值结尾,则为 -1(请注意,一些编码可能允许在字符串中出现空字节。在这种情况下,为 len 参数使用 -1 是不安全的)。

converter

类型:GIConv

g_iconv_open() 中的转换描述符。

bytes_read

类型:gsize*

用于存储输入字符串中已成功转换的字节数的位置,或为 NULL。即使转换成功,如果输入的结尾有部分字符,将来可能小于 len。如果发生错误 G_CONVERT_ERROR_ILLEGAL_SEQUENCE,则存储的值将是最后一个有效输入序列后的字节偏移量。

参数将由函数设置。
参数可以是 NULL
bytes_written

类型:gsize*

存储在输出缓冲区中的字节数(不包括终止 nul)。

参数将由函数设置。
参数可以是 NULL
error

类型:GError **

用于 可恢复错误 的返回位置。

参数可以是 NULL
如果返回位置不为 NULL,则必须将其初始化为 NULL GError*
如果无错误,参数将由该函数初始化为 NULL
如果发生错误,参数会设置为新建的 GError;调用方将拥有该数据的所有权,并负责释放它。

返回值

类型:guint8 数组

          If the conversion was successful, a newly allocated buffer
          containing the converted string, which must be freed with
          g_free(). Otherwise `NULL` and `error` will be set.
数组的长度保存在 bytes_written 参数中。
此函数的调用程序获得该数据的所用权并负责释放该数据。