检查字体是否支持特定字符

6
我在StackOverflow上找到了这篇文章:如何通过编程确定字体文件是否具有特定的Unicode字符?

然而,我还需要检查UTF-32字符。我的目标是解析unicode.org上的Unihan数据,并忽略所有不受“Arial Unicode MS”支持的字符。我已经开始修改CheckIfCharInFont()方法,使其接受一个字符串(用于utf-32),并检查它是否为代理对。然后,我通过char.ConvertToUtf32(surrogate1, surrogate2)获取Int32,但问题是当前的CheckIfCharInFont()方法仅支持Uint16...你可以看到我放置了一个“Debugger.Break”,这是一个小问题。有没有专家能帮助我解决这个问题呢?

谢谢

public static bool CheckIfCharInFont(string character, Font font)
        {
            UInt16 value = 0;
            int temp = 0;
            if (character.Length > 1) //UTF-32
            {
                temp = char.ConvertToUtf32(character[0], character[1]);
            }
            else
            {
                temp = (int)character[0];
            }

            if (temp > UInt16.MaxValue)
            {
                Debugger.Break();
                return false;
            }
            value = (UInt16)temp;

            //UInt16 value = Convert.ToUInt16(character);
            List<FontRange> ranges = GetUnicodeRangesForFont(font);
            bool isCharacterPresent = false;
            foreach (FontRange range in ranges)
            {
                if (value >= range.Low && value <= range.High)
                {
                    isCharacterPresent = true;
                    break;
                }
            }
            return isCharacterPresent;
        }

1
根据文档(http://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx),从GetFontUnicodeRanges返回的GLYPHSET结构包含16位值(除非您要求返回8位值)。看起来这个API不能告诉你关于U+FFFF以上的Unicode代码点。我不知道是否还有其他方法。 - Joe White
1
这真是太糟糕了。一定有一种方法可以列出字体文件中的所有代码点(或类似的内容),然后我就可以将我拥有的内容与字体文件中的内容进行匹配,并忽略任何缺失于字体中的字符。我想我只能继续寻找了。但到目前为止还没有什么运气... :-( - Matt
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接