STM32/STM8技术william hill官网
直播中

硬汉Eric2013

10年用户 1035经验值
擅长:嵌入式技术
私信 关注
[经验]

【安富莱】【STemWin教程】第17章 STemWin外语支持

第17章 STemWin外语支持
    本期教程的主要内容来自官方的用户手册,我这里专门的把这里的内容整理出一章主要是通过一些实例来帮助大家理解。
    阿拉伯语、泰语或汉语等外语文本一般含有emWin标准字体以外的字符。
    本章将介绍一些基本知识,比如定义全球所有可用字符的Unicode标准,以及UTF-8编码方案,emWin使用该方案来解码以Unicode字符编写的文本。同时还将说明如何启用阿拉伯语支持,以及如何采用Shift-JIS(日本工业标准)编码方案来显示文本。
    17. 1  Unicode
    17. 2 阿拉伯语支持
    17. 3 泰语支持
    17. 4 Shift JIS支持
    17. 5 总结
17.1 Unicode
    关于unicode的编码方面的知识在百度百科或者wiki百科上面有详尽的介绍,初学的一定要认真的看一下,了解这方面的知识对于以后学习大有裨益。这里我们主要的介绍一下UTF-8。
17.1.1 UTF-8 编码方案
    Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8,UTF-16,UTF-32都是将数字转换到程序数据的编码方案。
    ISO/IEC 10646-1定义了一种称为通用字符集(UCS)的多八位字符集,收入了全球大多数文字系统。然而,多八位字符并不兼容许多现有的应用程序和协议,因此就扩展出了一些各有特色的UCS转换格式(UTF)。
    举个例子帮助大家理解,在Unicode中,汉字“字”对应的数字是23383(十进制),十六进制表示为0x5B57。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8,UTF-16,UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:
  1. chardata_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8编码
  2. char16_tdata_utf16[]={0x6C49,0x5B57};//UTF-16编码
  3. char32_tdata_utf32[]={0x00006C49,0x00005B57};//UTF-32编码
    UTF-8具有多种特点,保留了全部ASCII字符,并且兼容依赖于ASCII值但对其他值透明的文件系统、解析器和其他软件。
    在emWin中,UTF-8字符以1至3个八位字节序列编码。如果将高序位设为0,则剩下的7位将用来编码字符值。在一个由n个八位字节构成的序列中(n>1),起始八位字节第n个高序位设为1,其后一位设为0。该八位字节的剩余位用于存放待编码字符的值位。后续八位字节都将高序位设为1,其后一位设为0,各剩6位,用于保存待编码字符的值位。下表显示了编码范围:
17.1.png
    为了说明UTF-8,这里给大家举一个例子,在emWin模拟器上面显示汉字“安富莱电子”,下面是在模拟器上面运行的代码(为了说明问题将所有的代码全部贴出)。
  1. #include "GUI.h"

  2. #ifndef GUI_CONST_STORAGE
  3.   #define GUI_CONST_STORAGE const
  4. #endif

  5. /* The following line needs to be included in any file selecting the
  6.    font.
  7. */
  8. extern GUI_CONST_STORAGE GUI_FONT GUI_Fontarmfly;

  9. /* Start of unicode area */
  10. GUI_CONST_STORAGE unsigned char acGUI_Fontarmfly_5B50[ 93] = { /* code 5B50 */
  11.   ________,________,________,
  12.   ________,________,________,
  13.   ________,________,________,
  14.   ________,________,________,
  15.   ________,________,________,
  16.   ________,________,________,
  17.   ________,________,________,
  18.   ___XXXXX,XXXXXXXX,XXXXX___,
  19.   ___XXXXX,XXXXXXXX,XXXXX___,
  20.   ________,________,_XXXX___,
  21.   ________,________,XXX_____,
  22.   ________,______XX,X_______,
  23.   ________,____XXXX,________,
  24.   ________,___XXX__,________,
  25.   ________,___XX___,________,
  26.   ________,___XX___,________,
  27.   XXXXXXXX,XXXXXXXX,XXXXXXXX,
  28.   XXXXXXXX,XXXXXXXX,XXXXXXXX,
  29.   ________,___XX___,________,
  30.   ________,___XX___,________,
  31.   ________,___XX___,________,
  32.   ________,___XX___,________,
  33.   ________,___XX___,________,
  34.   ________,___XX___,________,
  35.   ________,___XX___,________,
  36.   ________,___XX___,________,
  37.   ______XX,XXXXX___,________,
  38.   ______XX,XXXX____,________,
  39.   ________,________,________,
  40.   ________,________,________,
  41.   ________,________,________};

  42. GUI_CONST_STORAGE unsigned char acGUI_Fontarmfly_5B89[ 93] = { /* code 5B89 */
  43.   ________,________,________,
  44.   ________,________,________,
  45.   ________,________,________,
  46.   ________,________,________,
  47.   ________,___X____,________,
  48.   ________,__XXX___,________,
  49.   ________,___XXX__,________,
  50.   ________,____XX__,________,
  51.   __XXXXXX,XXXXXXXX,XXXXXXX_,
  52.   __XXXXXX,XXXXXXXX,XXXXXXX_,
  53.   __X_____,________,_____XX_,
  54.   __X_____,________,_____XX_,
  55.   __X_____,__X_____,_____XX_,
  56.   ________,_XX_____,________,
  57.   ________,XX______,________,
  58.   XXXXXXXX,XXXXXXXX,XXXXXXXX,
  59.   XXXXXXXX,XXXXXXXX,XXXXXXXX,
  60.   ______XX,________,XX______,
  61.   ______XX,________,XX______,
  62.   _____XX_,_______X,X_______,
  63.   _____XXX,X_____XX,X_______,
  64.   _______X,XXX__XXX,________,
  65.   ________,_XXXXXX_,________,
  66.   ________,__XXXXXX,________,
  67.   ________,XXXX__XX,XX______,
  68.   _____XXX,XXX_____,XXXX____,
  69.   _XXXXXXX,________,__XXXX__,
  70.   __XXX___,________,____X___,
  71.   ________,________,________,
  72.   ________,________,________,
  73.   ________,________,________};

  74. GUI_CONST_STORAGE unsigned char acGUI_Fontarmfly_5BCC[ 93] = { /* code 5BCC */
  75.   ________,________,________,
  76.   ________,________,________,
  77.   ________,________,________,
  78.   ________,________,________,
  79.   ________,________,________,
  80.   ________,___X____,________,
  81.   ________,___XX___,________,
  82.   ________,___XX___,________,
  83.   _XXXXXXX,XXXXXXXX,XXXXXXX_,
  84.   _XX_____,________,_____XX_,
  85.   _XX_____,________,_____XX_,
  86.   _XX_XXXX,XXXXXXXX,XXX__XX_,
  87.   _XX_____,________,________,
  88.   _____XXX,XXXXXXXX,XXX_____,
  89.   _____XX_,________,_XX_____,
  90.   _____XX_,________,_XX_____,
  91.   _____XXX,XXXXXXXX,XXX_____,
  92.   _____XX_,________,_XX_____,
  93.   ________,________,________,
  94.   ___XXXXX,XXXXXXXX,XXXXX___,
  95.   ___XX___,___XX___,___XX___,
  96.   ___XX___,___XX___,___XX___,
  97.   ___XXXXX,XXXXXXXX,XXXXX___,
  98.   ___XX___,___XX___,___XX___,
  99.   ___XX___,___XX___,___XX___,
  100.   ___XX___,___XX___,___XX___,
  101.   ___XXXXX,XXXXXXXX,XXXXX___,
  102.   ___XX___,________,___XX___,
  103.   ________,________,________,
  104.   ________,________,________,
  105.   ________,________,________};

  106. GUI_CONST_STORAGE unsigned char acGUI_Fontarmfly_7535[ 93] = { /* code 7535 */
  107.   ________,________,________,
  108.   ________,________,________,
  109.   ________,________,________,
  110.   ________,________,________,
  111.   ________,________,________,
  112.   ________,__XX____,________,
  113.   ________,__XX____,________,
  114.   ________,__XX____,________,
  115.   __XXXXXX,XXXXXXXX,XXXXX___,
  116.   __XXXXXX,XXXXXXXX,XXXXX___,
  117.   __X_____,__XX____,___XX___,
  118.   __X_____,__XX____,___XX___,
  119.   __X_____,__XX____,___XX___,
  120.   __X_____,__XX____,___XX___,
  121.   __XXXXXX,XXXXXXXX,XXXXX___,
  122.   __XXXXXX,XXXXXXXX,XXXXX___,
  123.   __X_____,__XX____,___XX___,
  124.   __X_____,__XX____,___XX___,
  125.   __X_____,__XX____,___XX___,
  126.   __X_____,__XX____,___XX___,
  127.   __XXXXXX,XXXXXXXX,XXXXX___,
  128.   __XXXXXX,XXXXXXXX,XXXXX___,
  129.   __X_____,__XX____,______X_,
  130.   __X_____,__XX____,_____XX_,
  131.   ________,__XX____,_____XX_,
  132.   ________,__XXXXXX,XXXXXXX_,
  133.   ________,___XXXXX,XXXXXX__,
  134.   ________,________,________,
  135.   ________,________,________,
  136.   ________,________,________,
  137.   ________,________,________};

  138. GUI_CONST_STORAGE unsigned char acGUI_Fontarmfly_83B1[ 93] = { /* code 83B1 */
  139.   ________,________,________,
  140.   ________,________,________,
  141.   ________,________,________,
  142.   ________,________,________,
  143.   ________,________,________,
  144.   ________,________,________,
  145.   _______X,_______X,X_______,
  146.   _______X,_______X,X_______,
  147.   _XXXXXXX,XXXXXXXX,XXXXXXXX,
  148.   _XXXXXXX,XXXXXXXX,XXXXXXXX,
  149.   _______X,_______X,X_______,
  150.   ________,___XX___,________,
  151.   __XXXXXX,XXXXXXXX,XXXXXX__,
  152.   __XXXXXX,XXXXXXXX,XXXXXX__,
  153.   _____X__,___XX___,__X_____,
  154.   _____XX_,___XX___,_XX_____,
  155.   ______XX,___XX___,XX______,
  156.   ______XX,X__XX__X,X_______,
  157.   _______X,___XX___,X_______,
  158.   _XXXXXXX,XXXXXXXX,XXXXXXX_,
  159.   _XXXXXXX,XXXXXXXX,XXXXXXX_,
  160.   ________,_XXXXXX_,________,
  161.   _______X,XX_XX_XX,________,
  162.   _____XXX,X__XX__X,XX______,
  163.   ___XXXX_,___XX___,_XXXX___,
  164.   _XXXX___,___XX___,___XXXXX,
  165.   _XX_____,___XX___,_____XX_,
  166.   ________,___XX___,________,
  167.   ________,________,________,
  168.   ________,________,________,
  169.   ________,________,________};

  170. GUI_CONST_STORAGE GUI_CHARINFO GUI_Fontarmfly_CharInfo[5] = {
  171.    {  24,  24,  3, acGUI_Fontarmfly_5B50 } /* code 5B50 */
  172.   ,{  24,  24,  3, acGUI_Fontarmfly_5B89 } /* code 5B89 */
  173.   ,{  24,  24,  3, acGUI_Fontarmfly_5BCC } /* code 5BCC */
  174.   ,{  24,  24,  3, acGUI_Fontarmfly_7535 } /* code 7535 */
  175.   ,{  24,  24,  3, acGUI_Fontarmfly_83B1 } /* code 83B1 */
  176. };

  177. GUI_CONST_STORAGE GUI_FONT_PROP GUI_Fontarmfly_Prop5 = {
  178.    0x83B1 /* first character */
  179.   ,0x83B1 /* last character  */
  180.   ,&GUI_Fontarmfly_CharInfo[  4] /* address of first character */
  181.   ,(GUI_CONST_STORAGE GUI_FONT_PROP *)0 /* pointer to next GUI_FONT_PROP */
  182. };

  183. GUI_CONST_STORAGE GUI_FONT_PROP GUI_Fontarmfly_Prop4 = {
  184.    0x7535 /* first character */
  185.   ,0x7535 /* last character  */
  186.   ,&GUI_Fontarmfly_CharInfo[  3] /* address of first character */
  187.   ,&GUI_Fontarmfly_Prop5 /* pointer to next GUI_FONT_PROP */
  188. };

  189. GUI_CONST_STORAGE GUI_FONT_PROP GUI_Fontarmfly_Prop3 = {
  190.    0x5BCC /* first character */
  191.   ,0x5BCC /* last character  */
  192.   ,&GUI_Fontarmfly_CharInfo[  2] /* address of first character */
  193.   ,&GUI_Fontarmfly_Prop4 /* pointer to next GUI_FONT_PROP */
  194. };

  195. GUI_CONST_STORAGE GUI_FONT_PROP GUI_Fontarmfly_Prop2 = {
  196.    0x5B89 /* first character */
  197.   ,0x5B89 /* last character  */
  198.   ,&GUI_Fontarmfly_CharInfo[  1] /* address of first character */
  199.   ,&GUI_Fontarmfly_Prop3 /* pointer to next GUI_FONT_PROP */
  200. };

  201. GUI_CONST_STORAGE GUI_FONT_PROP GUI_Fontarmfly_Prop1 = {
  202.    0x5B50 /* first character */
  203.   ,0x5B50 /* last character  */
  204.   ,&GUI_Fontarmfly_CharInfo[  0] /* address of first character */
  205.   ,&GUI_Fontarmfly_Prop2 /* pointer to next GUI_FONT_PROP */
  206. };

  207. GUI_CONST_STORAGE GUI_FONT GUI_Fontarmfly = {
  208.    GUI_FONTTYPE_PROP /* type of font    */
  209.   ,31 /* height of font  */
  210.   ,31 /* space of font y */
  211.   ,1 /* magnification x */
  212.   ,1 /* magnification y */
  213.   ,{&GUI_Fontarmfly_Prop1}
  214.   ,25 /* Baseline */
  215.   ,13 /* Height of lowercase characters */
  216.   ,18 /* Height of capital characters */
  217. };
  218. void MainTask(void)
  219. {
  220. GUI_Init();
  221. GUI_SetFont(&GUI_Fontarmfly);                                                                                        (3)
  222. GUI_UC_SetEncodeUTF8(); /* required only once to activate UTF-8*/(4)
  223. GUI_DispString("xe5xaex89xe5xafx8cxe8x8exb1xe7x94xb5xe5xadx90");
  224. while(1)
  225. {
  226. GUI_Delay(100);
  227. }
  228. }
1. 要注意这种数值的表达方式,具体定义如下:
    #define        ________        0x00
    #define        _______X        0x01
    #define        ______X_        0x02
    #define        ______XX        0x03
    #define        _____X__        0x04
    #define        _____X_X        0x05
    #define        _____XX_        0x06
    #define        _____XXX        0x07
    #define        ____X___        0x08
    #define        ____X__X        0x09
    #define        ____X_X_        0x0a
2. 后面的5B50就是汉字‘安’对象的Unicode吗,其它的类似。
3. 设置使用相应的字体。
4. 使能UTF-8解码,然后调用显示函数即可。
5. 上面字体编码的生成会在下期教程中跟大家详细讲解。
模拟器实际显示效果如下:
17.2.png

回帖(3)

硬汉Eric2013

2015-4-2 11:13:43
17.2 阿拉伯语支持
    关于阿拉伯语的支持在emWin手册中有详细的讲解,这里就不跟大家再赘述了。在此跟大家演示一下官方做的例子。例子位置如下:
17.3.png
这个DEMO的主程序如下(没有贴前面的数据部分,只贴了主函数):
  1. /*******************************************************************
  2. *
  3. *       Arabic and bidirectional text samples
  4. */
  5. static char * _apText[] = { (1)
  6. "nBidirectional textnnxd8xb9xd9x84xd8xa7 1, 2, 345 xd8xbaxd9x86xd9x8a XYZ xd8xa3xd9x86xd8xa7",
  7. "nBeautifulnnxd8xacxd9x80xd9x85xd9x8axd9x84",
  8. "nI'm from Lebanon.nnxd8xa3xd9x86xd8xa7 xd9x85xd9x86 xd9x84xd8xa8xd9x86xd8xa7xd9x86",
  9. "nI'm from Canada.nnxd8xa3xd9x86xd8xa7 xd9x85xd9x86 xd9x83xd9x86xd8xafxd8xa7",
  10. "nIsn't it like that?nnxd8xa3xd9x84xd9x8axd8xb3 xd9x83xd8xb0xd8xa7xd9x84xd9x83xd8x9f",
  11. "nDo you work?nnxd9x87xd9x84 xd8xaaxd8xb9xd9x85xd9x84xd8x9f",
  12. "nThe book is heavy.nnxd8xa7xd9x84xd9x83xd8xaaxd8xa7xd8xa8 xd8xabxd9x82xd9x8axd9x84",
  13. };

  14. /********************************************************************
  15. *
  16. *       Static code
  17. *
  18. *********************************************************************
  19. */
  20. /*******************************************************************
  21. *
  22. *       _ShowArabicTextSamples
  23. */
  24. static void _ShowArabicTextSamples(void) {
  25.   GUI_RECT Rect = {40, 60, 279, 199};

  26.   GUI_SetFont(&GUI_FontArabic24); // Set Arabic font(2)
  27.   while (1) {
  28.     unsigned i;

  29.     GUI_SetColor(GUI_RED);(3)
  30.     GUI_DrawRect(Rect.x0 - 1, Rect.y0 - 1, Rect.x1 + 1, Rect.y1 + 1);
  31.     GUI_SetColor(GUI_WHITE);
  32.     for (i = 0; i < GUI_COUNTOF(_apText); i++) {
  33.       GUI_DispStringInRectWrap(_apText[i], &Rect, GUI_TA_HCENTER, GUI_WRAPMODE_WORD);
  34.       GUI_Delay(2000);
  35.       GUI_ClearRectEx(&Rect);
  36.     }
  37.   }
  38. }

  39. /********************************************************************
  40. *
  41. *       Public code
  42. *
  43. *********************************************************************
  44. */
  45. /********************************************************************
  46. *
  47. *       MainTask
  48. */
  49. void MainTask(void) {
  50.   GUI_Init();
  51.   GUI_UC_SetEncodeUTF8(); // Enable UTF8 decoding(4)
  52.   GUI_UC_EnableBIDI(1);   // Enable bidirectional text   (5)
  53.   //
  54.   // Lable the sample
  55.   //
  56.   GUI_SetFont(&GUI_Font24_ASCII);
  57.   GUI_DispStringHCenterAt("Arabic language sample", 160, 5);
  58.   //
  59.   // Call demo loop
  60.   //
  61.   _ShowArabicTextSamples();
  62. }
1. ‘’号后面数字是通过官方的U2C小工具生成的,生成方面在官方的手册中有讲解。这个小软件的主要功能就是将UTF-8格式的文本转换为C编码。
2. 设置使用阿拉伯字体。
3. 画一个红色的小方框.。
4. 使能UTF-8解码。
5. 由于西方语言与阿拉伯语之间的根本差异在于,阿拉伯语是从右往左写的,而且不区分大小写。而默认情况下,emWin始终从左到右写文本,不会进行上述阿拉伯语字符转换操作。如果要启用对双向文本和阿拉伯字符转换的支持,则必须在应用中添加以这行代码。
    启用后,emWin会遵循统一码联盟规定的双向算法规则,以在绘制文本前获得正确的视觉顺序。
实际显示效果如下(动态的,这里只贴了一幅):
17.4.png

举报

硬汉Eric2013

2015-4-2 11:15:07
17.3 泰语支持
    关于泰语语的支持在emWin手册中有详细的讲解,这里就不跟大家再赘述了。在此跟大家演示一下官方做的例子。例子位置如下:
17.5.png
这个DEMO的主程序如下(没有贴前面的数据部分,只贴了主函数):
  1. /*******************************************************************
  2. *
  3. *       Thai text samples
  4. */
  5. static char * _apText[] = {
  6. "How are you?nxe0xb8xaaxe0xb8x9axe0xb8xb2xe0xb8xa2xe0xb8x94xe0xb8xb5xe0xb8xabxe0xb8xa3xe0xb8xb7xe0xb8xad",
  7. "Fine, and you?nxe0xb8xaaxe0xb8x9axe0xb8xb2xe0xb8xa2xe0xb8x94xe0xb8xb5 xe0xb9x81xe0xb8xa5xe0xb9x89xe0xb8xa7xe0xb8x84xe0xb8xb8xe0xb8x93xe0xb8xabxe0xb8xa5xe0xb9x88xe0xb8xb0xe0xb8x84xe0xb8xa3xe0xb8xb1xe0xb8x9a",
  8. "Nice to meet you.nxe0xb8xa2xe0xb8xb4xe0xb8x99xe0xb8x94xe0xb8xb5xe0xb8x97xe0xb8xb5xe0xb9x88xe0xb9x84xe0xb8x94xe0xb9x89xe0xb8xa3xe0xb8xb9xe0xb9x89xe0xb8x88xe0xb8xa3xe0xb8xb1xe0xb8x81",
  9. "You're welcome.nxe0xb9x84xe0xb8xa1xe0xb9x88xe0xb9x80xe0xb8x9bxe0xb9x87xe0xb8x99xe0xb9x84xe0xb8xa3",
  10. "I can't speak Thainxe0xb8x9exe0xb8xb9xe0xb8x94xe0xb8xa0xe0xb8xb2xe0xb8xa9xe0xb8xb2xe0xb9x84xe0xb8x97xe0xb8xa2xe0xb9x84xe0xb8xa1xe0xb9x84xe0xb8x94",
  11. "Do you speak English?nxe0xb8x9exe0xb8xb9xe0xb8x94xe0xb8xa0xe0xb8xb2xe0xb8xa9xe0xb8xb2xe0xb8xadxe0xb8xb1xe0xb8x87xe0xb8x81xe0xb8xa4xe0xb8xa9xe0xb9x84xe0xb8x94xe0xb9x89xe0xb9x84xe0xb8xabxe0xb8xa1",
  12. "Thank you very much.nxe0xb8x82xe0xb8xadxe0xb8x9axe0xb8x84xe0xb8xb8xe0xb8x93xe0xb8xa1xe0xb8xb2xe0xb8x81",
  13. "How do you say this in Thai?nxe0xb8x9exe0xb8xb9xe0xb8x94xe0xb9x80xe0xb8x9bxe0xb9x87xe0xb8x99xe0xb8xa0xe0xb8xb2xe0xb8xa9xe0xb8xb2xe0xb9x84xe0xb8x97xe0xb8xa2xe0xb8xadxe0xb8xa2xe0xb9x88xe0xb8xb2xe0xb8x87xe0xb9x84xe0xb8xa3",
  14. };

  15. /********************************************************************
  16. *
  17. *       Static code
  18. *
  19. *********************************************************************
  20. */
  21. /*******************************************************************
  22. *
  23. *       _ShowThaiTextSamples
  24. */
  25. static void _ShowThaiTextSamples(void) {
  26.   GUI_RECT Rect = {100, 60, 219, 199};
  27.   GUI_SetFont(&GUI_FontCordiaNew32); // Set thai font
  28.   while (1) {
  29.     unsigned i;
  30.     GUI_SetColor(GUI_RED);
  31.     GUI_DrawRect(Rect.x0 - 1, Rect.y0 - 1, Rect.x1 + 1, Rect.y1 + 1);
  32.     GUI_SetColor(GUI_WHITE);
  33.     for (i = 0; i < GUI_COUNTOF(_apText); i++) {
  34.       GUI_DispStringInRectWrap(_apText[i], &Rect, GUI_TA_HCENTER, GUI_WRAPMODE_WORD);
  35.       GUI_Delay(2000);
  36.       GUI_ClearRectEx(&Rect);
  37.     }
  38.   }
  39. }

  40. /********************************************************************
  41. *
  42. *       Public code
  43. *
  44. *********************************************************************
  45. */
  46. /********************************************************************
  47. *
  48. *       MainTask
  49. */
  50. void MainTask(void) {
  51.   GUI_Init();
  52.   GUI_UC_SetEncodeUTF8(); // Enable UTF8 decoding
  53.   //
  54.   // Lable the sample
  55.   //
  56.   GUI_SetFont(&GUI_Font24_ASCII);
  57.   GUI_DispStringHCenterAt("Thai language sample", 160, 5);
  58.   //
  59.   // Call demo loop
  60.   //
  61.   _ShowThaiTextSamples();
  62. }
这个程序和上面的阿拉伯语支持基本是一样的,显示效果如下:
17.6.png

举报

硬汉Eric2013

2015-4-2 11:16:23
17..4 Shift JIS支持
    Shift JIS(日本工业标准)是一种针对日语的字符编码方法。这是最常用的日语编码方法。Shift JIS编码大量使用8位字符,第一个字节的值用于区分单字节字符和多字节字符。仅当需要转换采用Shift JIS编码文本时,才需要emWin支持Shift JIS。绘制Shift JIS字符串时无需调用特殊函数。关键是要有一个含有Shift JIS字符的字体文件。
    字体转换器可以从任意Windows字体产生Shift JIS字体,以供emWin使用。使用Shift JIS字体时,用于显示Shift JIS字符的函数会自动与字体库链接。
    这部分知识大家可以看一下官网的演示例子进行详细了解。
17.5 总结
    本期教程大家重点的了解一下Unicode编码方面的知识,这部分知识很重要,其它的语言支持做个了解即可,用到的时候再做研究。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分