我必须在Libharu创建的pdf上写德语文本。我将德语文本分配给字符串变量(即std::string TestString = "VariableGesamtlänge";
),然后将该文本放入pdf。我的简单代码如下:
//-----UTF8 Encoding
HPDF_UseUTFEncodings(pdf);
HPDF_SetCurrentEncoder(pdf, "UTF-8");
const char *fontname = HPDF_LoadTTFontFromFile(pdf, "FreeSans.ttf", HPDF_TRUE);
HPDF_Font font = HPDF_GetFont(pdf, fontname, "UTF-8");
HPDF_Page_SetFontAndSize(page, font, 24);
std::string TestString = "VariableGesamtlänge";
DrawText(page, font, TestString.c_str(), y);
问题:我得到两个方框而不是ä
。我正在使用 VS2010 。
答案 0 :(得分:1)
'ä'不是ASCII字符。它可以存储为单个字符(在这种情况下,哪一个?),或者可以存储为多个字符(在这种情况下,哪些是?)。
您已告知HPDF功能,您将以UTF-8(这是一个完全明智的选择)传递文本。这意味着'ä'由0xC3 0xA4表示。
源文件几乎肯定是用8位文本编码的,使用(可能)代码页1252.所以'ä'将是单个字符0xE4。您需要告诉编译器将字符串存储为UTF-8,或者可以使用UTF-8重新编码源文件。
您的最终选择是将文本存储在(UTF-8)文件中,并从那里读取。