Wednesday, October 7, 2015

Character Bitmap display - 1

2.1 字元編碼觀念

  • 文字編碼方式

原始檔案用不同的編碼方式編寫,會導致執行結果不一樣
怎麼解決?編譯器時,要指定字元集
查詢: man gcc , /charset
-finput-charset=charset  表示原始檔案的編碼方式, 預設以UTF-8來解析
-fexec-charset=charset   表示可執行程式裡的字時候以什麼編碼方式來表示,預設是UTF-8
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c

實驗:將兩種不同編碼方式的文件(ansi.c and utf-8.c),字元"abc中"輸出16進制數值

==================================================
ansi.c  and  utf-8.c


#include <stdio.h>

int main(int argc, char **argv)
{
int i = 0;
unsigned char *str="abc中";

while (str[i])
{
printf("%02x ", str[i]);
i++;
}
printf("\n");
return 0;
}
===================================================
實驗結果:
scyu@scyu-VirtualBox:~/share/linux_source/digital_frame_photo/01/2th$ gcc -o ansi ansi.c
scyu@scyu-VirtualBox:~/share/linux_source/digital_frame_photo/01/2th$ ./ansi
61 62 63 d6 d0
scyu@scyu-VirtualBox:~/share/linux_source/digital_frame_photo/01/2th$ gcc -o utf-8 utf-8.c
scyu@scyu-VirtualBox:~/share/linux_source/digital_frame_photo/01/2th$ ./utf-8
61 62 63 e4 b8 ad

同樣輸出字元,不同編碼方式,會導致結果不一樣,不同的16進制數值
===================================================
解決辦法:
編譯時加入輸入與輸出編碼方式
-finput-charset=GBK:指定輸入的編碼格式
-fexec-charset=UTF-8:指定輸出的編碼格式


scyu@scyu-VirtualBox:~/share/linux_source/digital_frame_photo/01/2th$ gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c
scyu@scyu-VirtualBox:~/share/linux_source/digital_frame_photo/01/2th$ ./utf-8_2
61 62 63 e4 b8 ad
得到相同輸出結果,同樣的16進制數值


參考資料:
  1. 嵌入式Linux應用開發完全手冊
  2. 韋東山視頻三期


No comments:

Post a Comment