当前位置: 首页 > 知识库问答 >
问题:

如何检查字体支持哪些字符集(代码页)(有字母表示)?

宋健柏
2023-03-14

对于我的应用程序,我需要显示一个系统字体列表,但过滤掉所有不支持20种预定义语言的字体(这一套是硬编码的),只显示那些支持的。

我可以通过调用vcl.forms.screen.fonts获得可用字体的列表。
仅知道该列表中的字体名称,如何检查该字体支持哪些字符集(代码页)(有实际的字母)?

例如,像Arial或Times New Roman这样的通用字体几乎包含所有欧洲语言的字符,包括西里尔文(还有中文等等)。然而,许多不太常见的字体通常只有英文字母。

该应用程序是内部使用的,因此只要有一个功能,只需查询字体是否有特定于某个字符集/代码页(例如)的某个字母,并且该字体没有被其他通用字体(或某个占位符)的字母替代就足够了。

共有1个答案

虞修平
2023-03-14

GetGlyphIndees函数可用于确定字体中是否存在字形。

DWORD GetGlyphIndices(
  _In_  HDC     hdc,
  _In_  LPCTSTR lpstr,
  _In_  int     c,
  _Out_ LPWORD  pgi,
  _In_  DWORD   fl
);

参数[...]

fl[in]:指定不支持字形时应如何处理字形。此参数可以是以下值。

此函数尝试为LPSTR所指向的字符串中的每个字符标识一个单字形表示。虽然这对于某些低级目的(如操作字体文件)很有用,但希望将字符串映射到字形的高级应用程序通常希望使用Uniscribe函数。

由于这两个API都是从Win2k开始支持的,所以使用哪一个可能是一个口味问题。

(编辑:刚刚注意到导入已经在Windows.pas中)

procedure Test( dc : HDC);
var str : UnicodeString;
    buf : array of WORD;
    len,i : Integer;
    count : DWORD;
begin
  str := 'abc'+WideChar($0416)+'äöü';
  len := Length(str);
  SetLength( buf, len);
  count := GetGlyphIndicesW( dc, PWideChar(str), len, @buf[0], GGI_MARK_NONEXISTING_GLYPHS);
  if count > 0 then begin
    for i := 0 to count-1 do begin
      Write('index ',i,': ');
      if buf[i] = $FFFF
      then Writeln('glyph missing')
      else Writeln('ok');
    end;
  end;
end;
index 0: ok
index 1: ok
index 2: ok
index 3: glyph missing
index 4: ok
index 5: ok
index 6: ok
 类似资料:
  • 问题内容: 如何在Linux上从TrueType或嵌入式OpenType字体中提取受支持的Unicode字符列表? 我是否可以使用工具或库来处理.ttf或.eot文件并构建字体提供的代码点列表(例如U + 0123,U + 1234等)? 问题答案: 这是使用FontTools模块的方法(您可以使用来安装该模块): 该脚本将字体路径作为参数:

  • 问题内容: 什么是最好的纯Python实现,以检查字符串是否包含字母表中的任何字母? 哪里会因为没有字母而返回,而会因为有了字母而返回。 问题答案: 正则表达式应该是一种快速的方法:

  • 我需要检查字符串(单词,没有空格)是否有给定字母表的任何字母。 我想有效地比较字符串和字母表。我想检查字符串是否由字母表中的字母组成。现在我的字母表在ArrayList中,在For循环中,我检查字符串是否包含ArrayList的字母,如果为true,则退出,否则继续下一个字母。上面字符串A的示例将返回false,因为p和l不是字母表的一部分。但对于B,它将返回真值。 这样做能更有效吗?谢谢你的帮助

  • 以下是我的项目的细节: 字谜:这个项目的目的是创建一个游戏,在这个游戏中,用户可以看到一个单词的字谜,并且必须在有限的尝试次数内猜出正确的单词。项目特点: null

  • 问题内容: 您如何检查Java字符串中有多少个字母? 您如何检查字符串中某个位置的哪个字母(即字符串的第二个字母)? 问题答案: 一个) http://download.oracle.com/javase/7/docs/api/java/lang/String.html#length%28%29 编辑 如果您要计算中的特定类型字符的数量,则一种简单的方法是根据您的测试用例来检查每个索引。 其中可以

  • 给定一个字符串s和一个非空字符串p,在s中找到p的字母表的所有起始索引。 null