我正在尝试使用 iconv 清理 utf-8 编码的缓冲区并删除所有无效的 utf-8 代码点。下面是我的代码片段:
iconv_t conv = iconv_open("UTF-8//IGNORE","UTF-8");
iconvctl(conv, ICONV_SET_DISCARD_ILSEQ, &flag);
iconv(conv, &inbuf, &len, &outbuf, &outlen);
iconv_close(conv);
我注意到它无法删除 0xD800-0xDfff (代理对)范围内的代码点,即使这些代码点不是有效的 utf-8 代码点。
其他无效代码点(例如超过 0x10FFFF 和错误/损坏的 utf-8 字节序列)已成功清除。
这里可能是什么问题?
谢谢,
阿努拉格