- 使用Xcode编译器,下面代码输出中文乱码:
// ...省略创建pdf和page的步骤
char *out_txt = "简体中文";
HPDF_UseCNSFonts(pdf);
HPDF_UseCNSEncodings(pdf);
HPDF_Font font = HPDF_GetFont(pdf, "SimHei", "GB-EUC-H");
HPDF_Page_SetFontAndSize(page, font, 14);
HPDF_Page_BeginText(page);
HPDF_Page_TextOut(page, 0, 100, out_txt);
HPDF_Page_EndText(page);
Xcode默认使用UTF-8编码,out_txt就不是GB/GBK编码,所以需要将out_txt转换为GBK编码,转换代码如下
char *utf_2_gbk(char *in_buf, size_t in_len) {
iconv_t cd = iconv_open("GBK", "UTF-8");
if (cd == (iconv_t)-1) {
perror("获取字符转换描述符失败!\n");
return NULL;
}
size_t sz = in_len * in_len;
char *tmp_str = (char *)malloc(sz);
// 不要将原始的指针传进去,那样会改变原始指针的
size_t inlen = in_len;
size_t outlen = sz;
char *in = in_buf;
char *out = tmp_str;
if (tmp_str == NULL) {
iconv_close(cd);
fprintf(stderr, "分配内存失败!\n");
return NULL;
}
memset(tmp_str, 0, sz);
if (iconv(cd, &in, &inlen, &out, &outlen) == (size_t)-1) {
iconv_close(cd);
return NULL;
}
iconv_close(cd);
return tmp_str;
}
最后,只需要在char *out_txt = "简体中文";
后添加一句char * c_out_txt = utf_2_gbk(out_txt, strlen(out_txt));
然后将输出的out_txt
改为c_out_txt
即可解决问题.
网友评论