none
关于WPF 中 UNICODE字符不能显示问题 RRS feed

  • 问题

  • 各位,我和朋友正在试着做一个WPF的project,需要让LISTBOX显示自定义的UNICODE字符,是我们自己画的.不在标准范围之内.
    是用WINDOWS 7自带的字符编辑器画出来的.
    现在出现一个问题,我们的自定义字符在listbox控件中不可以正确显示.
    但是奇怪的是,标准的字符,比如日文,韩文,中文都可以正确在listbox中显示.
    同时,如果不过WPF的listbox,利用winform的listbox,在WPF中就可以正确显示了..
    问题出在哪里呢?
    我们试着在XAML位置加了一行语句, 是MSDN 提供的UNICODE现实需要的语句,但是..没有起到作用
    不知道问题在哪里.
    语句如下: 
     <?xml version="1.0" encoding="UTF-8"?>
    2011年1月17日 3:18

答案

  • 今天听搭档说WPF可以支持ttf格式的font..

    找了一下,居然找到答案了!

     

    因为开了这个问题..放上来给以后有需要的人看一下吧.

    之前一直找错方向了.

     

    参考文献为以下三个:

    http://msdn.microsoft.com/en-us/library/cc295083.aspx

    http://msdn.microsoft.com/en-us/library/cc294629.aspx

    首先,要下载EXPRESSION BLEND 来改变WPF中 控件的样式

    在EXPRESSION BLEND中有一个叫做font manager的东西.

    选中你要改变font display的控件, 比如我在做的项目中,就是listbox需要改变,

    从右边找到text属性,点选EMBEDDED,然后在embed fonts的对话框中找到 EUDC 这个字体.

    这个应该就是对应EUDC.TTE的内容的font啦~

    加入这个font之后记得text属性左上角的显示格式也改成EUDC

     

    然后从新debug程序..就可以跑啦!

    我们是在在C#中写的code 引用UNICODE的自定义部分, 代码样例如下:

     

    TruthTable.Add("00000010000000000000000000", "\ue000"); 

    请忽略其他东西..呵呵 关键在于 用 \UE000(16进制,PRIVATE CHARACTER EDITOR中提供的自定义位置) 这种格式就可以了.

    查了一下被blend改完的xaml code,唯一的区别在于这里:

    FontFamily="/Blink;component/Fonts/#EUDC"

     

    如果已经有TTF文件的人就不用这么辛苦了.可以直接在project里面加..我们遇到的情况是没有办法造成TTF文件的

    可以参考这个链接:

    http://msdn.microsoft.com/en-us/library/cc295281.aspx

    2011年1月20日 14:30
  • 你好,

    虽然XAML本身是一个XML文件,但是需要通过XAML编译器来编译,并且还是要通过XAML的解释来转换成CLR的对象,所以在XAML标准中,并没有体现出 <?xml version="..." encoding="..."?> 等内容。具体XAML文档规范你可以从这里查看和下载:http://msdn.microsoft.com/en-us/library/ms788723.aspx#the_xaml_language_specification

    对于在XAML中显示Unicode信息,我们可以直接在编码中写:

    <TextBlock Text="&#xFFFF;"/> <!-- 16进制形式 -->
    <TextBlock Text="&#12345;"/> <!-- 10进制形式 -->
    
    Sincerely
    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月18日 8:35
    版主

全部回复

  • 各位,我和朋友正在试着做一个WPF的project,需要让LISTBOX显示自定义的UNICODE字符,是我们自己画的.不在标准范围之内.
    是用WINDOWS 7自带的字符编辑器画出来的.
    现在出现一个问题,我们的自定义字符在listbox控件中不可以正确显示.
    但是奇怪的是,标准的字符,比如日文,韩文,中文都可以正确在listbox中显示.
    同时,如果不过WPF的listbox,利用winform的listbox,在WPF中就可以正确显示了..
    问题出在哪里呢?
    我们试着在XAML位置加了一行语句, 是MSDN 提供的UNICODE现实需要的语句,但是..没有起到作用
    不知道问题在哪里.
    语句如下: 
     <?xml version="1.0" encoding="UTF-8"?>


    恩..不知道有没有人遇到过这个问题.

    我们该写什么东西declare使用UNICODE呢?

    UTF-8是不是有问题? 我写的code是/UE000这样的,用hex编码的,是不是该用UTF-16呢?

    不过UTF-16 compile的时候会出错..WPF中不支持吗?

    2011年1月17日 3:24
  • 你好,

    虽然XAML本身是一个XML文件,但是需要通过XAML编译器来编译,并且还是要通过XAML的解释来转换成CLR的对象,所以在XAML标准中,并没有体现出 <?xml version="..." encoding="..."?> 等内容。具体XAML文档规范你可以从这里查看和下载:http://msdn.microsoft.com/en-us/library/ms788723.aspx#the_xaml_language_specification

    对于在XAML中显示Unicode信息,我们可以直接在编码中写:

    <TextBlock Text="&#xFFFF;"/> <!-- 16进制形式 -->
    <TextBlock Text="&#12345;"/> <!-- 10进制形式 -->
    
    Sincerely
    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月18日 8:35
    版主
  • 谢谢BOB BAO版主大人..

    我试了一下你给的方法,发现正常范围内的UNICODE,比如中文,韩文,都可以显示.

    但是我用的UNICODE在用户自定义范围内,也就是16进制中从E000以后的位置..

     

    WPF一样不会认不会显示.

    也就是说,现有的方法,都不支持用户自定义的字符.. 在UNICODE官方范围以外的都不可以显示.

    是因为MARK UP LANGUAGE 有自己的一套转换方法吗?

    怎么样改变WPF读取的UNICODE的范围呢?

    显示出来是方框哦.

    2011年1月20日 10:01
  • 今天听搭档说WPF可以支持ttf格式的font..

    找了一下,居然找到答案了!

     

    因为开了这个问题..放上来给以后有需要的人看一下吧.

    之前一直找错方向了.

     

    参考文献为以下三个:

    http://msdn.microsoft.com/en-us/library/cc295083.aspx

    http://msdn.microsoft.com/en-us/library/cc294629.aspx

    首先,要下载EXPRESSION BLEND 来改变WPF中 控件的样式

    在EXPRESSION BLEND中有一个叫做font manager的东西.

    选中你要改变font display的控件, 比如我在做的项目中,就是listbox需要改变,

    从右边找到text属性,点选EMBEDDED,然后在embed fonts的对话框中找到 EUDC 这个字体.

    这个应该就是对应EUDC.TTE的内容的font啦~

    加入这个font之后记得text属性左上角的显示格式也改成EUDC

     

    然后从新debug程序..就可以跑啦!

    我们是在在C#中写的code 引用UNICODE的自定义部分, 代码样例如下:

     

    TruthTable.Add("00000010000000000000000000", "\ue000"); 

    请忽略其他东西..呵呵 关键在于 用 \UE000(16进制,PRIVATE CHARACTER EDITOR中提供的自定义位置) 这种格式就可以了.

    查了一下被blend改完的xaml code,唯一的区别在于这里:

    FontFamily="/Blink;component/Fonts/#EUDC"

     

    如果已经有TTF文件的人就不用这么辛苦了.可以直接在project里面加..我们遇到的情况是没有办法造成TTF文件的

    可以参考这个链接:

    http://msdn.microsoft.com/en-us/library/cc295281.aspx

    2011年1月20日 14:30
  • 你好,

    对于自定义的Unicode, 他会有一个对应的字体;对于怎么在WPF里面显示,请参考英文论坛上的这个帖子:http://social.msdn.microsoft.com/Forums/en/wpf/thread/73b22408-c60f-44d5-81bc-73d08fd893c0

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月20日 14:34
    版主
  • 刚要回复,你就找到答案了,哈哈 很及时,祝贺你!
    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月20日 14:34
    版主