在电子邮件客户端的上下文中,我需要转换为许多不同的字符集和unicode。到目前为止,在Windows和Linux上,我一直在使用iconv在字符集之间进行文本转换。然而在Mac上我尝试的第一次转换,从cp932到utf-16失败,带有一堆垃圾字符。我有一个谷歌,有些人建议首先使用setlocale设置语言环境,但这似乎不会影响事情。
也许我根本不应该在Mac上使用iconv?是否有用于charset转换的替代API?
我对修复iconv代码的建议持开放态度......代码基本上是这样的:
setlocale(LC_ALL,"");
iconv_t Conv;
if ((Conv = libiconv_open("utf-16", "cp932")) >= 0)
{
// Convert
int s = libiconv(Conv, &InBuf, (size_t*)&InLen, &OutBuf, (size_t*)&OutLen);
libiconv_close(Conv);
}
Windows上的相同输入文本工作正常,在mac上产生垃圾。
答案 0 :(得分:2)
CFString(-framework CoreFoundation
)具有字符转换API。基本上,您从CP932(kCFStringEncodingDOSJapanese
)字符串创建CFString,然后您可以从中提取UTF-16数据。
更多信息here。