对于某些字体,c#-CharacterToGlyphMap包含错误的Unicode代码点
我使用字形字体的CharacterToGlyphMap 获取任何字体中包含的所有字符。如果我使用例如Arial,一切都是正确的,但对于某些字体,我得到了错误的代码点 例如,对于Ebrima,我得到了一些超出Unicode范围的代码点。Ebrima字体中的最后一个字符是hex:FD3F(dec:64831),但CharacterToGlyphMap包含一些附加值,例如(dec:66688、66689、66690…)。对于上述示例,错误代码点的原因可能是什么 编辑: 我实现了自己的字符映射,对于某些字体,我的应用程序崩溃,因为我使用对于某些字体,c#-CharacterToGlyphMap包含错误的Unicode代码点,c#,C#,我使用字形字体的CharacterToGlyphMap 获取任何字体中包含的所有字符。如果我使用例如Arial,一切都是正确的,但对于某些字体,我得到了错误的代码点 例如,对于Ebrima,我得到了一些超出Unicode范围的代码点。Ebrima字体中的最后一个字符是hex:FD3F(dec:64831),但CharacterToGlyphMap包含一些附加值,例如(dec:66688、66689、66690…)。对于上述示例,错误代码点的原因可能是什么 编辑: 我实现了自己的字符映射,对于某
Convert.ToChar(unicodeCodePoint)
这个问题的解决方案是限制字符的使用(感谢@AakashM),例如
foreach(glyphTypeface.CharacterToGlyphMap中的KeyValuePair项)
{
如果(item.Key>=Char.MinValue&&item.Key“Ebrima字体中的最后一个字符是hex:FD3F”这句话的来源是什么?(请注意)“超出Unicode范围”是什么意思?Unicode不会停留在U+FFFF上。我创建了字符映射,因此基于内置窗口。感谢您的回复AakashM。Sebastian Negraszus您是对的,我的错误。@rgb添加一个解释您所做的事情和所看到的事情的答案,这可能会对将来的人有所帮助。
foreach (KeyValuePair<int, ushort> item in glyphTypeface.CharacterToGlyphMap)
{
if (item.Key >= Char.MinValue && item.Key <= Char.MaxValue)
{
limitedCharacterMap.Add(item.Key, item.Value);
}
}