我在便携式OpenGL应用程序上使用Freetype 2.5.3
。
我的问题是我无法在我的Windows机器上获得unicode,而我在基于Linux的系统上正确获取它们(lubuntu,OSX,Android)
我使用着名的arialuni.ttf
(23mb),所以我非常确定它包含了所有内容。事实上,我在之前的Windows安装(Win7)中使用了工作,然后从另一个源重新安装了Win7,现在unicode无法正常工作。
特别是当我绘制一个字符串时,只有latin会在unicode被跳过时呈现。我挖得更深,我发现字符代码不是wstring
中的字符代码。例如,我在γ
字符串中使用了一些希腊字母,我知道它应该947
wstring
。
我的引擎只是迭代wstring
个字符并将上面的代码点驱动到另一个保存纹理坐标的向量,这样我就可以绘制字形。
问题是,在我的Windows 7计算机上,947
没有为γ
提供179
,而是给了我Ά
。此外,206
的字符将返回902
代码(??)的2个字符,而不是wstring
中的一个字符。
就像简单地迭代for(size_t c=0,sz=wtext.size();c<sz;c++) {
uint32_t ch = wtext[c]; // code point
...
}
一样,如:
Win7
这只发生在我新安装的wstring wtext = L"blΆh";
上;它之前在另一个Win7系统以及我的所有Linux机器上运行。现在它已经破坏了,也在我的XP虚拟机上。
我没有使用任何宽格式化功能,就像:
900-950
此外,我可以看到我的字形在我的OpenGL纹理中正确呈现,因此也不会出现字体问题。我的字体生成器使用希腊范围的〜FT_UInt charcode;
FT_ULong character = FT_Get_First_Char(face, &charcode);
do {
character = FT_Get_Next_Char(face, character, &charcode);
...
} while(charcode);
代码点来收集字形。
我用这个语言添加每种语言的代码点:
{{1}}
答案 0 :(得分:0)
不确定为什么,但我通过将文件保存为UTF-8 BOM
来修复它,而不是UTF-8
(我默认使用它)。