洪星的博客(原创版,新闻除外)

信息技术 软件开发 电信 移动通信(欢迎和我交流:QQ219402,15152399197)

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  12 随笔 :: 0 文章 :: 62 评论 :: 0 引用

公告

2010年2月2日 #

上一篇说了 Silverlight 中的中文字体,现在来说说 Windows 中的中文字体。

 

在默认情况下,也就是未自行安装新字体或者 Office 等文字处理软件的情况下,Windows 默认提供下列字体:

Windows 95/98/98SE 宋体、黑体、楷体_GB2312、仿宋_GB2312
Windows XP/2000/2003/ME/NT 宋体/新宋体、黑体、楷体_GB2312、仿宋_GB2312 (Windows XP SP3 宋体-PUA)
Windows Vista/7/2008 宋体/新宋体、黑体、楷体、仿宋、微软雅黑、SimSun-ExtB

 

那么每种字体能显示那些汉字呢?

Vista 之前的 Windows 中宋体/新宋体、黑体支持 GBK 1.0 字符集,
楷体_GB2312、仿宋_GB2312 支持 GB2312-80 字符集。
(注:Windows 3.X 只能支持 GB2312-80 字符集)

 

Vista 及之后的 Windows 中宋体/新宋体、黑体、楷体、仿宋、微软雅黑支持 GB18030-2000 字符集,
SimSun-ExtB 只支持 GB18030-2005 字符集扩展 B 部分。

 

下面对字符集进行简单的介绍:
GB2312-80 < GBK 1.0 < GB18030-2000 < GB18030-2005
GB2312-80 中的字符数量最少,GB18030-2005 字符数量最多。

GB2312-80 是最早的版本,字符数比较少;
GBK 1.0 中的汉字大致与 Unicode 1.1 中的汉字数量相同;
GB18030-2000 中的汉字大致与 Unicode 3.0 中的汉字数量相同,主要增加了扩展 A 部分;
GB18030-2005 中的汉字大致与 Unicode 4.1 中的汉字数量相同,主要增加了扩展 B 部分;
由于 Unicode 5.2 的发布,估计 GB18030 会在近期发布新版本,增加扩展 C 部分。
需要说明的是在 GB18030 中扩展 B 部分并不是强制标准。
如果想查看 GB18030 的标准文本,请访问 http://www.gb168.cn 中的强标阅读。
如果想了解 Unicode 的内容,请访问 http://www.unicode.org

 

现在纠正网上普遍的一个错误:
GB18030-2000 和 GB18030-2005 都不支持单字节的欧元符号 € (0x80),只有 GBK 1.0 支持,从标准原文可以得知。

测试代码
//GBK 的代码页为 936 (默认)
string euro1 = Encoding.GetEncoding(936).GetString(new byte[] { 0x80 });
//GB18030 的代码页为 54936
//euro2 会显示为 ?
string euro2 = Encoding.GetEncoding(54936).GetString(new byte[] { 0x80 });

 

与简体中文有关的代吗页如下:
936      gb2312                  简体中文(GB2312)----其实是GBK
10008    x-mac-chinesesimp       简体中文(Mac)
20936    x-cp20936               简体中文(GB2312-80)
50227    x-cp50227               简体中文(ISO-2022)
51936    EUC-CN                  简体中文(EUC)
52936    hz-gb-2312              简体中文(HZ)
54936    GB18030                 简体中文(GB18030)

 

这是我的 Unicode 测试网址,你的系统能显示那些?
http://www.hongcing.com/tool/unicode(进入连接后,可以点击下载,上午可能无法访问,下午、晚上正常访问)

 

补充:刚才想到了,但是忘了写了。

使用楷体_GB2312、仿宋_GB2312后,在 Windows 7/Vista/2008 中可能不再显示为对应的字体。

这是因为 Windows 7/Vista/2008 中有楷体、仿宋,默认情况下没有楷体_GB2312、仿宋_GB2312,字体名称相差“_GB2312”。

posted @ 2010-02-02 21:39 洪星 阅读(880) 评论(0) 编辑

先贴代码、后贴图,相信不需要说太多。此文只能解决静态文本显示问题,至于动态文本,看完这篇文章,再加上自己的摸索,相信你能想出来。当然如有不明白可以和我交流。同时说明我也是初学者,学习时间按天计算。

 

MainPage.xaml
<UserControl x:Class="Hongcing.Silverlight.Font.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<!--不能直接使用“宋体”、“黑体”等中文字体名称,否则无效。-->
<TextBox Text="洪星的博客-Aa1-默认字体" FontSize="36" Margin="10" />
<TextBox Text="洪星的博客-Bb2-微软雅黑" FontFamily="Fonts/Fonts.zip#Microsoft YaHei" FontSize="36" Margin="10" />
<TextBox Text="洪星的博客-Cc3-黑体" FontFamily="SimHei" FontSize="36" Margin="10" />
<TextBox Text="洪星的博客-Dd4-宋体" FontFamily="SimSun" FontSize="36" Margin="10" />
<TextBox Text="洪星的博客-Ee5-新宋体" FontFamily="NSimSun" FontSize="36" Margin="10" />
<TextBox Text="洪星的博客-Ff6-仿宋" FontFamily="Fonts/Fonts.zip#FangSong" FontSize="36" Margin="10" />
<TextBox Text="洪星的博客-Gg7-楷体" FontFamily="Fonts/Fonts.zip#KaiTi" FontSize="36" Margin="10" />
</StackPanel>
</UserControl>

 

 Silverlight 3 字体测试,在 Windows XP 中微软雅黑也能直接显示,仿宋、楷体也能显示。

 http://www.hongcing.com/Tool/Silverlight3Font

 

项目文件关于字体的一段内容
<ItemGroup>
<BlendEmbeddedFont Include="Fonts\simsun.ttc">
<IsSystemFont>True</IsSystemFont>
<All>False</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>False</Uppercase>
<Lowercase>False</Lowercase>
<Numbers>False</Numbers>
<Punctuation>False</Punctuation>
</BlendEmbeddedFont>
</ItemGroup>
<ItemGroup>
<BlendEmbeddedFont Include="Fonts\simfang.ttf">
<IsSystemFont>True</IsSystemFont>
<All>False</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>False</Uppercase>
<Lowercase>False</Lowercase>
<Numbers>False</Numbers>
<Punctuation>False</Punctuation>
</BlendEmbeddedFont>
</ItemGroup>
<ItemGroup>
<BlendEmbeddedFont Include="Fonts\simhei.ttf">
<IsSystemFont>True</IsSystemFont>
<All>False</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>False</Uppercase>
<Lowercase>False</Lowercase>
<Numbers>False</Numbers>
<Punctuation>False</Punctuation>
</BlendEmbeddedFont>
</ItemGroup>
<ItemGroup>
<BlendEmbeddedFont Include="Fonts\simkai.ttf">
<IsSystemFont>True</IsSystemFont>
<All>False</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>False</Uppercase>
<Lowercase>False</Lowercase>
<Numbers>False</Numbers>
<Punctuation>False</Punctuation>
</BlendEmbeddedFont>
</ItemGroup>
<ItemGroup>
<BlendEmbeddedFont Include="Fonts\msyh.ttf">
<IsSystemFont>True</IsSystemFont>
<All>False</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>False</Uppercase>
<Lowercase>False</Lowercase>
<Numbers>False</Numbers>
<Punctuation>False</Punctuation>
</BlendEmbeddedFont>
<BlendEmbeddedFont Include="Fonts\msyhbd.ttf">
<IsSystemFont>True</IsSystemFont>
<All>False</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>False</Uppercase>
<Lowercase>False</Lowercase>
<Numbers>False</Numbers>
<Punctuation>False</Punctuation>
</BlendEmbeddedFont>
</ItemGroup>

 

在 Microsoft Expression Blend 3 中的字体管理器选择需要嵌入的字体,一般不要对中文字体选择所有字形,否则 XAP 文件会很大。(选择客户端可能不支持的字体,例如 Window XP 默认不支持微软雅黑)

 

字体的子集被打包到程序集资源中

 

程序集资源中的字体子集(就是打包在上面的 fonts/fonts.zip),是不是比较小阿,还是 ZIP 压缩的,XAML 使用的字体名也在这里可以看到。(这里顺便表扬一下 7Z,确实比较牛 B)

posted @ 2010-02-02 17:49 洪星 阅读(1606) 评论(5) 编辑