声明
CURLcode conv_callback(char *ptr, size_t length);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION,
conv_callback);
概要
把数据从本机编码转换成网络编码。
概要
传入一个指向你的回调函数的指针,该函数应该符合上面显示的原型。
该选项应用于非ASCII平台。如果提供了这个选项,curl_version_info
会返回CURL_VERSION_CONV
特性位。
被转换的数据位于由ptr
参数指向的的缓冲区中。转换的数据大小由length
参数指定。转换后的数据会覆盖由ptr
参数指向的缓冲区中的输入数据。当转换成功的时候,必须返回CURLE_OK
。当发生错误时,应该返回一个在curl.h
中定义的CURLcode
返回值,例如CURLE_CONV_FAILED
。
CURLOPT_CONV_TO_NETWORK_FUNCTION
从本机编码转换成网络编码。它在通过网络发送命令或者ASCII数据时被使用。
如果你设置回调指针为NULL,或者根本不设置它,那么内置的libcurl iconv函数会被使用。如果在构建libcurl的时候没有定义HAVE_ICONV
,而且没有设置回调,转换的时候会返回CURLE_CONV_REQD
错误码。
如果定义了HAVE_ICONV
,那么一定要同时定义CURL_ICONV_CODESET_OF_HOST
。例如:
#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
libcurl的iconv代码会像下面那样设置默认的网络和UTF8编码集的名称:
#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
如果它们在你的系统上不一样,你需要重写这些定义。
备注
- 如果要使用libcurl内置的iconv函数,需要定义
HAVE_ICONV
,并且通过CURL_ICONV_CODESET_OF_HOST
和CURL_ICONV_CODESET_OF_NETWORK
定义恰当的本机编码和网络编码。- 设置这个回调可以替换内置的iconv函数,本机编码和网络编码由回调的实现来决定。
默认值
NULL。
适用协议
FTP,SMTP,IMAP,POP3。
可用性
只在构建libcurl时定义了CURL_DOES_CONVERSIONS
的情况下可用。
返回值
如果支持该选项,返回CURLE_OK
;否则返回CURLE_UNKNOWN_OPTION
。