1、源起:
VCU10项目,使用了Noto Sans字体,的确漂亮。但验证在win7下,其显示韩文为乱码,颇为头痛。
其界面显示如图:

度娘之,得Noto Sans又有CJK字体,顾名思义,其为支持中日韩文,且其体积巨大,不宜做为方案,继续思考!
2、Font.GdiCharSet 属性
也是没有办法,看在目前基础上,能不能解决问题?程序多国语言需支持。
就从字体本身属性开始检查吧,验证发现,改其字符集GdiCharSet,可正常显示韩文,解决方案有了!
查阅资料得知,字体GdiCharSet可有如下值:
字符集 |
值 |
|---|---|
ANSI |
0 |
DEFAULT |
1 |
符号 |
2 |
SHIFTJIS 适用 |
128 |
韩语 |
129 |
朝鲜语 |
129 |
GB2312 |
134 |
CHINESEBIG5 适用 |
136 |
OEM |
255 |
韩文 |
130 |
希伯来语 |
177 |
阿拉伯语 |
178 |
希腊语 |
161 |
土耳其语 |
162 |
越南语 |
163 |
泰语 |
222 |
EASTEUROPE |
238 |
俄语 |
204 |
MAC |
77 |
波罗的语 |
186 |
验证比如东欧、波罗的海等字符集,可以正常显示韩文,而不影响其默认字符集显示效果,于是,决定替换其字符集。
3、替换
项目界面已设定字体,且界面众多,一个一个改当然不够方便,写代码批量处理吧!
在每个窗体,或每个UserControl中,调用一下UpdateNotoSansCharset()数,就统一替换了。
//处理Label字体,以能在win7下,NotoSans字体能显示韩文public static void UpdateNotoSansCharset(Form form)
{if (OSUtils.OSVersion > FriendlyOSVersion.Win7)return;foreach (Control ctrl in form.Controls)
UpdateNotoSansCharset(ctrl);
}public static void UpdateNotoSansCharset(ScrollableControl parent)
{if (OSUtils.OSVersion > FriendlyOSVersion.Win7)return;foreach (Control ctrl in parent.Controls)
UpdateNotoSansCharset(ctrl);
}public static void UpdateNotoSansCharset(GControl ctrl)
{if (ctrl is ScrollableControl)
UpdateNotoSansCharset(ctrl as ScrollableControl);else if (ctrl is Label)
{//CharSet采用中欧字符集var font = new Font(ctrl.Font.FontFamily, ctrl.Font.Size, ctrl.Font.Style, ctrl.Font.Unit, 238);
ctrl.Font = font;
}
}
4、效果
OK,难题解决,非常完美:

编辑推荐:
- c#中Noto Sans字体支持韩文的实例教程02-21
- C#给图片增加文字实例代码02-21
- WPF实现简单的进度条怎么做?02-21
- angularjs是怎么为ng-click事件传递参数的?02-21
- C# 利用委托进行异步处理实例代码02-21
- Oracle Clob字段过长保存出错改如何解决?02-21
- IIS中出现了时间格式转换错误该如何解决?02-21
- lambda表达式进行对象结合操作的实例详解02-21
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
