SkiaSharp中文字体问题.md
SkiaSharp 中文字体问题
SkiaSharp
SkiaSharp是基于Google的Skia图形库(skia.org)的.NET平台的跨平台2D图形API 。它提供了全面的2D API,可在移动,服务器和台式机模型之间使用以渲染图像。
SkiaSharp为以下内容提供跨平台绑定:
- .NET标准1.3
- .NET核心
- 提岑
- Xamarin.Android
- Xamarin.iOS
- Xamarin.tvOS
- Xamarin.watchOS
- Xamarin.Mac
- Windows经典桌面(Windows.Forms / WPF)
- Windows UWP(台式机/移动/ Xbox / HoloLens)
- Web汇编(WASM)
该API文档可在以下网站上浏览。
SKTypeface.FromFamilyName
获取中文字体
- 操作系统WIN8
- 目标框架.Net Framework4.7.2
var stypeface = SKTypeface.FromFamilyName("宋体");
通过该方法无法正确获取宋体。获取到的为SkiaSharp默认的字体:
{SkiaSharp.SKTypeface.SKTypefaceStatic} FamilyName: "Segoe UI" FontSlant: Upright FontStyle: {SkiaSharp.SKFontStyle} FontWeight: 400 FontWidth: 5 GlyphCount: 5012 Handle: 0x05112170 IgnorePublicDispose: true IsBold: false IsDisposed: false IsFixedPitch: false IsItalic: false OwnsHandle: true Style: Normal TableCount: 23 UnitsPerEm: 2048
图片中的中文为口子方块:

图片中的中文为口子方块
解决方法
使用SKFontManager
类来获取中文字体,代码如下:
// 获取宋体在字体集合中的下标 var index = SKFontManager.Default.FontFamilies.ToList().IndexOf("宋体"); // 创建宋体字形 var songtiTypeface = SKFontManager.Default.GetFontStyles(index).CreateTypeface(0);
获取到正确的中文字体:
{SkiaSharp.SKTypeface} FamilyName: "SimSun" FontSlant: Upright FontStyle: {SkiaSharp.SKFontStyle} FontWeight: 400 FontWidth: 5 GlyphCount: 28762 Handle: 0x060aace0 IgnorePublicDispose: true IsBold: false IsDisposed: false IsFixedPitch: false IsItalic: false OwnsHandle: true Style: Normal TableCount: 22 UnitsPerEm: 256
图片中的中文正确显示:

图片中的中文正确显示
也可以直接使用SKTypeface.FromFamilyName("SimSun")
获取中文字体
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异