数码相框设计-文字编码方式

来源:互联网 发布:怎么退出手机淘宝账号 编辑:程序博客网 时间:2024/06/10 18:57

我们玩过uboot就会知道,烧写完uboot.bin后串口会打印一段启动信息的字符

  • 我假设在uboot中有puts(“copy”);那么通过串口调试工具(sercucrt等)我们可以在其中看到copy字符:

这里写图片描述

原理:开发板程序将字符”cop”对应的ASCII编码表中的ASCII码发给PC串口->串口工具收到这个ASCII码0x70、0x6F、0x43->然后串口工具根据0x70、0x6F、0x43 对应的ASCII点阵字体库(如ASC12 ASC16)找到对应的字体数据,把它们的点阵描出来。

总结:

这里写图片描述

  • 全世界那么多个国家,每个国家又有自己特有的编码表(比如美国:ASCII编码表、中国:GBK编码表、台湾:BIG5等等)。不同的编码难免会在不同的国家对应不同字符,那么就引入了一种统一的编码表- unicode编码表

  • 而unicode编码表只是一个字符集,数字与字符的对应关系而已,对于数字的存储就需要一个编码方式-utf8
    这里写图片描述

文字的编码方式导致的问题:

源文件用不同的编码方式编写,会导致执行的结果不同:

源代码:

#include <stdio.h>int main(int argc, char **argv){    int i = 0;    unsigned char* = "abc中";    while (str[i])    {        printf("%02#x ",str[i]);        i++;    }    printf("\n");    return 0;}

我们分别采取两种不同的编码方式存储:ansci和utf8
这里写图片描述
这里写图片描述
对比一下结果:
这里写图片描述

默认不是uft-8格式解析吗,为什么还是以ANSI方式解析没有用默认呢:这是一个巧合,在ansi方式下中对应0xd6 d0恰好也对应和uft-8解析方法的一种,所以将这里的ansi解析方式当作了uft-8解析方式。(验证方法:将编码方式改成
这里写图片描述)

怎么解决?编译程序的时候指定字符集。

  • 执行命令 : man gcc
  • 查找字符集: /charset
    -finput-charset=charset 表示源文件使用编码方式,默认以 UTF-8解析
    -fexec-charset=charset 表示可执行程序里的字符串以什么编码方式来表示,默认为 UTF-8

如:

 gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf8_1 ansi.c

这里写图片描述

注意:

关于文字编码方式不是此项目的重点,想了解更多下面例出来跳转链接,在此只要会用命令来指定可执行程序的编码即可

gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf8_1 ansi.c
  • 编码格式简介(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)
  • 为什么要采用UTF-8编码,UTF-8编码有什么好处?
  • UNICODE编码表