Unicode 检查字体是否支持某些字符
我在StackOverflow上找到了这个: 但是,我还需要检查UTF-32字符。我试图在unicode.org上解析Unihan数据,忽略所有“Arial unicode MS”不支持的字符。我通过修改arg以获取字符串(对于utf-32)并检查它是否是代理对,开始了CheckIfCharInfo()方法的工作。然后我通过执行char.ConvertToUtf32(代理1,代理2)来获取Int32,但问题是当前的checkifCharInfo()方法只支持Uint16。。。您可以看到我在哪里放置了一个“Debugger.Break”,这有点问题。有没有专家能帮我解决这个问题 谢谢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。。。您可以看到我在哪里放
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代码点。我不知道是否有其他方法。好吧,那太糟糕了。必须有某种方法在字体文件(或类似文件)中列出所有代码点,然后我可以将我拥有的与字体文件中的内容进行匹配,并忽略字体中缺少的任何字符。我想我只能继续四处看看。但目前为止运气不好…:-(