4

我必须在 Libharu 创建的 pdf 上写德语文本。我将 German Text 分配给一个字符串变量(即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

4

1 回答 1

1

'ä' 不是 ASCII 字符。它可以存储为单个字符(在这种情况下,哪个?),或者它可以存储为多个字符(在这种情况下,哪些?)。

您已经告诉 HPDF 函数,您要将文本作为 UTF-8 传递(这是一个完全明智的选择)。这意味着“ä”由 0xC3 0xA4 表示。

源文件几乎肯定是用 8 位文本编码的,使用(可能)代码页 1252。所以“ä”将是单个字符 0xE4。您要么需要告诉编译器将字符串存储为 UTF-8,要么可以将源文件重新编码为 UTF-8。

您的最终选择是将文本存储在 (UTF-8) 文件中,然后从那里读取。

于 2016-12-13T16:12:53.040 回答