最近因為公司任務的關係,我要負責弄DVB-T的東西。DVB-T對我是一個全新的挑戰,也滿有趣的。第一個遇到的問題就是EPG的亂碼。想到亂碼的解決,就是澆冷水...囧rz.....恕我開個玩笑。:-P
咳咳...在Linux的環境下,一想到轉碼,就會想到iconv!
對iconv,小弟都只聞其名、未深入體驗,這次剛好有個機會來嘗試。試著寫個簡單的小範例來轉換字串成UTF-8或是Big5。
PS:因為blogger不知道要怎麼顯示 <> 這樣的符號(會被辨試成delimiter),所以改用 "" 表示。
#include "iconv.h"
#include "string.h"
#include "stdlib.h"
#include "errno.h"
int main( int argc, char **argv )
{
iconv_t cd;
size_t in_s, out_s;
/* UTF-8 轉 Big5 */
cd = iconv_open("BIG-5", "UTF8");
char *ibuf = "我是阿信", *in_ptr;
char *obuf = NULL, *out_ptr;
in_s = strlen(ibuf);
in_ptr = ibuf;
obuf = malloc( in_s * 3 );
out_s = in_s * 3;
out_ptr = obuf;
if( cd == (iconv_t )-1 ){
fprintf( stderr, "error opening iconv \n" );
exit(1);
}
if( iconv( cd, &in_ptr, &in_s, &out_ptr, &out_s) == -1 ){
printf("errno: %s\n", strerror(errno));
}
*out_ptr = '\0';
printf("%s, %s\n",ibuf, obuf);
iconv_close( cd );
free( obuf );
return 0;
}
接下來就 gcc -Wall a.c -o a.out,開一個Big5的terminal,執行一下這個新生的a.out,就能看到轉換後的字串了。
試用過了iconv之後,花了一點時間修改dvb-apps的scan程式,利用下scan指令後,會得到正確的節目表的名稱在新產生的channel.conf檔案內了。
2 則留言:
感謝..你這篇是我找到最簡單又最清楚的code。
非常感謝 我是初學者 看過很多有關iconv的code 本篇的code真的簡潔有力又明瞭
張貼留言