Unicode 检查字体是否支持某些字符

Unicode 检查字体是否支持某些字符,unicode,fonts,Unicode,Fonts,我在StackOverflow上找到了这个: 但是,我还需要检查UTF-32字符。我试图在unicode.org上解析Unihan数据,忽略所有“Arial unicode MS”不支持的字符。我通过修改arg以获取字符串(对于utf-32)并检查它是否是代理对,开始了CheckIfCharInfo()方法的工作。然后我通过执行char.ConvertToUtf32(代理1,代理2)来获取Int32,但问题是当前的checkifCharInfo()方法只支持Uint16。。。您可以看到我在哪里放

我在StackOverflow上找到了这个:

但是,我还需要检查UTF-32字符。我试图在unicode.org上解析Unihan数据,忽略所有“Arial unicode MS”不支持的字符。我通过修改arg以获取字符串(对于utf-32)并检查它是否是代理对,开始了CheckIfCharInfo()方法的工作。然后我通过执行char.ConvertToUtf32(代理1,代理2)来获取Int32,但问题是当前的checkifCharInfo()方法只支持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;
        }
publicstaticboolcheckifcharinfo(字符串、字体)
{
UInt16值=0;
内部温度=0;
如果(character.Length>1)//UTF-32
{
temp=char.ConvertToUtf32(字符[0],字符[1]);
}
其他的
{
temp=(int)字符[0];
}
如果(温度>UInt16.MaxValue)
{
Debugger.Break();
返回false;
}
值=(UInt16)温度;
//UInt16值=Convert.ToUInt16(字符);
列表范围=GetUnicorangesForFont(字体);
bool isCharacterPresent=false;
foreach(范围中的FontRange)
{

如果(value>=range.Low&&value,您将不得不做自己的事情。可能从规范()开始


这就是这个工具所做的:

根据文档(),从GetFontUnicoranges返回的GLYPHSET结构包含16位值(除非您要求8位值)。看起来这个API根本无法告诉您U+FFFF以上的Unicode代码点。我不知道是否有其他方法。好吧,那太糟糕了。必须有某种方法在字体文件(或类似文件)中列出所有代码点,然后我可以将我拥有的与字体文件中的内容进行匹配,并忽略字体中缺少的任何字符。我想我只能继续四处看看。但目前为止运气不好…:-(