2009-09-17 37 views
20

Tôi có phông chữ của bên thứ ba có hỗ trợ ký tự tiếng Nhật mà tôi cần sử dụng cho một ứng dụng. Bất cứ khi nào một ký tự không được hỗ trợ bởi phông chữ này, hình chữ nhật thường thấy ("ký tự mặc định") được vẽ. Rõ ràng không phải tất cả các nhân vật Nhật Bản đều được hỗ trợ, bởi vì nếu tôi cố gắng vẽ các bản dịch mà văn phòng dịch thuật của chúng tôi đã cung cấp cho chúng tôi, có rất nhiều hình chữ nhật.Nhận các ký tự được hỗ trợ của phông chữ - trong C#

Tôi cần được thông báo bất cứ khi nào một ký tự không được hỗ trợ được sử dụng, để tôi có thể thay đổi phông chữ cho ký tự đơn này (như Word) hoặc thực hiện một số phản ứng khác.

Bất kỳ ý tưởng nào? Nếu tôi có thể trích xuất một danh sách các ký tự unicode từ tệp TTF, thì tôi sẽ có thể kiểm tra xem một nhân vật được sử dụng có nằm trong danh sách này hay không. Nhưng làm thế nào tôi có thể làm như vậy?

+0

tôi đang đối mặt chính xác với cùng một vấn đề. tôi phải loại trừ các ký tự loại hình chữ nhật này khỏi các phông chữ của bên thứ ba khác nhau. ai đó xin vui lòng cung cấp cho bất kỳ giải pháp .... – Mohsan

Trả lời

-2

Bạn không thể kéo nó lên trong Bản đồ ký tự và lưu ý các phạm vi ký tự không được xác định? Có lẽ một cách có lập trình để phân tích một tệp TTF cho thông tin này nhưng nếu nó chỉ là một phông chữ cụ thể thì có thể dễ dàng hơn chỉ để mở Bản đồ Ký tự, đặt Nhóm theo Unicode Subrange và Nhóm theo "Nhật Bản Hiragana/Katakana" và chỉ cần lưu ý các phạm vi được xác định.

22

Dựa trên this answer.

Hãy chắc chắn để tham khảo PresentationCore.dll

Hãy thử sử dụng mã này: image

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)); 
        } 

       } 
      } 
     } 
    } 
} 

Output loại bỏ do ImageShack thay thế cũ, hình ảnh bị xóa với một quảng cáo.

+0

Có cách nào để làm điều này với UWP? Tôi cần hoàn thành nhiệm vụ liên quan trong ứng dụng UWP. – erickfiveten

Các vấn đề liên quan