C# 如何通过编程获得字体支持的字符编码?

C# 如何通过编程获得字体支持的字符编码?,c#,fonts,C#,Fonts,有没有办法使用C#获得字体支持的字符编码?简短回答:否 在.Net世界中,没有代码页:一切都是用Unicode完成的 字体是映射到Unicode代码点子集(32位整数)上的字形(字符的图形表示)的集合 CLR字符串是System.Char(无符号16位整数)的UTF-16编码列表。这意味着某些Unicode代码点(0x00000080及更高)在字符串中表示为一对16位字符,根据UTF-16计算。在内部[1],字符串从UTF-16转换为UTF-32,现在的32位字符用于查找适当的标志符号 [1]

有没有办法使用C#获得字体支持的字符编码?

简短回答:

在.Net世界中,没有代码页:一切都是用Unicode完成的

字体是映射到Unicode代码点子集(32位整数)上的字形(字符的图形表示)的集合

CLR字符串是System.Char(无符号16位整数)的UTF-16编码列表。这意味着某些Unicode代码点(0x00000080及更高)在字符串中表示为一对16位字符,根据UTF-16计算。在内部[1],字符串从UTF-16转换为UTF-32,现在的32位字符用于查找适当的标志符号


[1] 从逻辑上讲,无论如何。我不知道实际的实现细节是什么。

字体和编码完全是正交的;一种字体可以被多种编码使用,一种编码可以使用多种字体。它们之间没有一对一的关系,也没有字符:字形的1:1映射,特别是在unicode中。想想结扎术。。。(1 glpyh表示某一集合+2或3个字符的顺序,如ffi)。在排版方面,引用维基百科的话,“在书写和排版中,两个或两个以上的*字形连接为一个字形时,就会出现连字。*”(一个字形是书写语言的基本单位,对我们西方人来说是一个字母。)在连字中,单个字体的形状取决于上下文。有关更多信息,请参阅。但我认为,就这个问题而言,字符和字形之间的区别相当迂腐。