freetype函数可以接受Unicode文件名吗?

时间:2012-04-09 14:51:11

标签: c++ visual-studio unicode freetype

我有一个使用freetype的MSVC项目,现在我正在尝试将其移动到Unicode。但是freetype函数不接受文件路径的LPCTSTR参数,它们需要“const char *”。所以像

这样的代码
    WINDOWS_FONT WindowsFont;
    // ....
    FT_New_Face (pLibrary, WindowsFont.pszFileName, i, &face); // WindowsFont.pszFileName is LPTSTR

用于在项目为ascii时工作但在Unicode时不再工作。有没有办法让freetype接受Unicode文件名,有些预处理器定义可以将它切换为unicode吗?

3 个答案:

答案 0 :(得分:4)

C ++标准(2003)中没有wfopen。由于freetype是可移植的,它只使用fopen,它只能接受const char *文件名。因此,要么将文件加载到内存(或内存映射它),然后使用FT_New_Memory_Face创建字体或将wchar_t pszFileName转换为8位编码,可能会因转换不可能而丢失字符。

在Linux上,您可以尝试使用setlocale,这样fopen将接受UTF8字符串,将wchar_t字符串转换为UTF8。但是,在Windows it won't work 上。因此要么将文件加载到内存,要么将pszFileName转换为8位编码,然后将其传递给FT_New_Face。

答案 1 :(得分:1)

您最好的选择可能是遵循框架惯例并导入tchar.h,然后使用_tfopen代替(并转换为LPCTSTR_T("your_string")等)。这将允许您为Linux和Windows编译相同的代码,几乎不做任何更改,同时在代码中支持UTF-16或UTF-8。

答案 2 :(得分:0)

您可以使用FT_Open_Face方法,它需要FT_Open_Args结构作为参数。 在FT_Open_Args.stream中,您可以设置海关读取和关闭回调,FreeType可以从您想要的任何流中读取字体数据。

祝你好运