Windows上的Freetype unicode

时间:2016-03-22 02:57:09

标签: freetype2

我在便携式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}}

1 个答案:

答案 0 :(得分:0)

不确定为什么,但我通过将文件保存为UTF-8 BOM来修复它,而不是UTF-8(我默认使用它)。