【问题标题】:Checking if certain characters are supported by a font检查字体是否支持某些字符
【发布时间】:2011-07-13 13:23:14
【问题描述】:

我在 StackOverflow 上找到了这个:Is there a way to programmatically determine if a font file has a specific Unicode Glyph?

但是,我还需要检查 UTF-32 字符。我要做的是在 unicode.org 上解析 Unihan 数据并忽略“Arial Unicode MS”不支持的所有字符。我开始研究 CheckIfCharInFont() 方法,方法是修改 arg 以获取字符串(对于 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;
        }

【问题讨论】:

  • 根据文档 (msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx),从 GetFontUnicodeRanges 返回的 GLYPHSET 结构包含 16 位值(除非您要求改为 8 位值)。看起来这个 API 根本无法告诉您 U+FFFF 以上的 Unicode 代码点。不知道有没有别的办法。
  • 好吧,这简直太棒了。必须有某种方法可以列出字体文件(或类似文件)中的所有代码点,然后我可以将我拥有的内容与字体文件中的内容进行匹配,并忽略字体中缺少的任何字符。我想我只需要继续环顾四周。到目前为止还没有运气...... :-(

标签: unicode fonts


【解决方案1】:

你必须做你自己的事。也许从规格开始 (http://www.microsoft.com/typography/otspec/cmap.htm)

这就是这个工具的作用:http://mihai-nita.net/2007/09/08/charmapex-some-kind-of-character-map/

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 2014-06-01
    • 2018-06-05
    • 2016-08-09
    • 2014-05-07
    • 2011-06-01
    • 2015-03-15
    • 2018-05-01
    相关资源
    最近更新 更多