24

アプリケーションで使用する必要がある日本語の文字をサポートするサードパーティのフォントがあります。文字がこのフォントでサポートされていない場合は常に、よく見られる長方形 (「デフォルト文字」) が描画されます。明らかに、すべての日本語文字がサポートされているわけではありません。翻訳オフィスから提供された翻訳を描画しようとすると、長方形がたくさんあるからです。

サポートされていない文字が使用されるたびに通知を受ける必要があるため、この 1 文字のフォントを変更したり (Word のように)、それに対する他の反応を実装したりできます。

何か案は?TTF ファイルから Unicode 文字のリストを抽出できれば、使用されている文字がこのリストに含まれているかどうかを確認できます。しかし、どうすればそうできますか?

4

2 に答える 2

26

この答えに基づいて。

必ずPresentationCore.dllを参照してください

このコードを使用してみてください:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;

namespace fontChecker
{
    class Program
    {
        static void Main(string[] args)
        {
            var families = Fonts.GetFontFamilies(@"C:\WINDOWS\Fonts\Arial.TTF");
            foreach (FontFamily family in families)
            {
                var typefaces = family.GetTypefaces();
                foreach (Typeface typeface in typefaces)
                {
                    GlyphTypeface glyph;
                    typeface.TryGetGlyphTypeface(out glyph);
                    IDictionary<int, ushort> characterMap = glyph.CharacterToGlyphMap;

                    foreach (KeyValuePair<int, ushort> kvp in characterMap)
                    {
                        Console.WriteLine(String.Format("{0}:{1}", kvp.Key, kvp.Value));
                    }

                }
            }
        }
    }
}

ImageShackが古い削除された画像を広告に置き換えたため、出力画像が削除されました。

于 2009-09-17T15:43:49.527 に答える
-3

Character Map でそれを引き出して、定義されていない文字範囲に注意することはできませんか?

この情報を得るために TTF ファイルを解析するプログラムによる方法はおそらくありますが、それが 1 つの特定のフォントである場合は、文字マップを開き、Group by を Unicode Subrange に設定し、Group by "Japanese Hiragana/Katakana" を設定してメモを取る方がおそらく簡単です。定義された範囲の。

于 2009-09-17T15:29:34.320 に答える