【问题标题】:German text not proper on PDF created by Libharu C++Libharu C++ 创建的 PDF 上的德语文本不正确
【发布时间】:2016-12-13 15:53:26
【问题描述】:

我必须在 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

【问题讨论】:

    标签: c++ pdf libharu


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 在这种情况下,我没有从任何文件中读取变量。我应该怎么做才能告诉 ``DrawText()` 我正在发送 char*,它指向一个可能包含ä 等字符的字符串
    • You either need to tell the compiler to store strings as UTF-8,....我该怎么做?在 C++11 中是可能的,但我没有使用它。
    • 按照http://stackoverflow.com/questions/23264818/storing-unicode-utf-8-string-in-stdstring 给出的代码,您建议将字符串转换为 utf-8 字符串。但是,如果我从 XML 文件中读取变量,如何将其转换为 UTF-8?
    • 啊,生活更轻松。如果 XML 文件中已经包含 UTF-8,则无需进行任何转换。如果它没有 UTF-8,那么就修复它吧!
    • 这实际上是我的主要问题。我有一个 UTF-8 编码的 XML 文件(在 Notepad++ 中交叉检查)。我使用pugixml 库解析变量并将变量存储在字符串向量中。但是当我如上所述将这些变量放在PDF上时,会出现奇怪的字符。我认为问题出在解析本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多