有谁知道为什么HarfBuzz与FreeType只是渲染“??? ???? ????”

问题描述 投票:0回答:1

我编译了这个HarfBuzz示例,我得到的渲染只是“???? ???? ?????”。

我正在编译的例子是这个https://github.com/tangrams/harfbuzz-example

输出应该看起来像示例的github页面上显示的内容,但我只是得到“???? ??? ????”对于所有不同的文本。

这是程序的输出,因此它似乎正在加载示例中附带的字体,尽管这些名称看起来相当通用:

> 0: DejaVu Serif Book unic plat=0 id=3
> 1: DejaVu Serif Book unic plat=0 id=4
> 2: DejaVu Serif Book armn plat=1 id=0
> 3: DejaVu Serif Book unic plat=3 id=1
> 4: DejaVu Serif Book unic plat=3 id=10
> 0: Source Sans Pro Regular unic plat=0 id=3
> 1: Source Sans Pro Regular armn plat=1 id=0
> 2: Source Sans Pro Regular unic plat=3 id=1
> 3: Source Sans Pro Regular ADOB plat=7 id=0
> 0: AR PL New Sung Regular unic plat=0 id=3
> 1: AR PL New Sung Regular armn plat=1 id=0
> 2: AR PL New Sung Regular unic plat=3 id=1
> ex 0 string min_x=3 max_x=420 min_y=-1 max_y=36 bbox 417x37 boffs 36,3
> ex 0 origin 20,50 bbox l=23 r=440 t=14 b=51
> ex 1 string min_x=1 max_x=356 min_y=0 max_y=34 bbox 355x34 boffs 34,1
> ex 1 origin 425,125 bbox l=426 r=781 t=91 b=125
> ex 2 string min_x=-10 max_x=12 min_y=-250 max_y=-4 bbox 22x246 boffs -10,-4
> ex 2 origin 389,200 bbox l=379 r=401 t=204 b=450

这些是它试图呈现的字符串:

const char *texts[NUM_EXAMPLES] = {
  "Ленивый рыжий кот",
  "كسول الزنجبيل القط",
  "懶惰的姜貓",
}; 

如果我将字符串更改为英文字符,它们渲染正常,这使我认为字体不包含正确的语言,但据我所知,它正在加载示例附带的字体,我确实尝试更改我被告知的阿拉伯字体肯定包含阿拉伯字体。

/* Load our fonts */
FT_Face ft_face[NUM_EXAMPLES];
assert(!FT_New_Face(ft_library, "fonts/DejaVuSerif.ttf", 0, &ft_face[ENGLISH]));
assert(!FT_Set_Char_Size(ft_face[ENGLISH], 0, ptSize, device_hdpi, device_vdpi));
ftfdump(ft_face[ENGLISH]); // wonderful world of encodings ...
force_ucs2_charmap(ft_face[ENGLISH]); // which we ignore.

assert(!FT_New_Face(ft_library, "fonts/SourceSansPro-Regular.otf", 0, &ft_face[ARABIC]));
assert(!FT_Set_Char_Size(ft_face[ARABIC], 0, ptSize, device_hdpi, device_vdpi));
ftfdump(ft_face[ARABIC]);
force_ucs2_charmap(ft_face[ARABIC]);

assert(!FT_New_Face(ft_library, "fonts/fireflysung-1.3.0/fireflysung.ttf", 0, &ft_face[CHINESE]));
assert(!FT_Set_Char_Size(ft_face[CHINESE], 0, ptSize, device_hdpi, device_vdpi));
ftfdump(ft_face[CHINESE]);
force_ucs2_charmap(ft_face[CHINESE]);

我正在使用C ++ 17进行编译。我已经读过这个以防有人提到它:https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

有谁知道为什么我只是得到问号?我需要启用UTF-8的编译器设置吗?编译器是否有可能删除UTF-8字符串?

谢谢!

c++ unicode utf-8 freetype harfbuzz
1个回答
0
投票

是的,有一个编译器选项,/ utf-8(MSVC)

© www.soinside.com 2019 - 2024. All rights reserved.