开发iOS邮箱APP时出现有的邮件个别汉字丢失问题,最终找到原因是6字节格式汉字中有的内容被误认为是一种占位符,被替换为nbsp。解决方法,在下面的函数中添加
tidyOptSetBool(tdoc, TidyQuoteNbsp, no);
以禁用这种替换。
String * HTMLCleaner::cleanHTML(String * input)
{
TidyBuffer output;
TidyBuffer errbuf;
TidyBuffer docbuf;
int rc;
TidyDoc tdoc = tidyCreate();
tidyBufInit(&output);
tidyBufInit(&errbuf);
tidyBufInit(&docbuf);
Data * data = input->dataUsingEncoding("utf-8");
tidyBufAppend(&docbuf, data->bytes(), data->length());
#if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
// This option is not available on the Mac.
tidyOptSetBool(tdoc, TidyDropEmptyElems, no);
#endif
tidyOptSetBool(tdoc, TidyXhtmlOut, yes);
tidyOptSetBool(tdoc, TidyQuoteNbsp, no);
tidyOptSetInt(tdoc, TidyDoctypeMode, TidyDoctypeUser);
tidyOptSetBool(tdoc, TidyMark, no);
tidySetCharEncoding(tdoc, "utf8");
tidyOptSetBool(tdoc, TidyForceOutput, yes);