判断文件的编码方式
| /* ????功能:實(shí)現(xiàn)文件編碼格式的判斷 ????通過(guò)一個(gè)文件的最前面三個(gè)字節(jié),可以判斷出該的編碼類型: ????ANSI: 無(wú)格式定義;(第一個(gè)字節(jié)開始就是文件內(nèi)容) ????Unicode: 前兩個(gè)字節(jié)為FFFE; ????Unicode big endian: 前兩字節(jié)為FEFF; ????UTF-8: 前兩字節(jié)為EFBB,第三字節(jié)為BF */ #include <stdio.h> #include <stdlib.h> #include <string.h> // 讀取一個(gè)文件的最前面n個(gè)字節(jié),并以十六進(jìn)制形式輸出每個(gè)字節(jié)的值 void?readNBytes(char?*fileName, int?n) { ????FILE?*fp = fopen(fileName, "r"); ????unsigned char?*buf = (unsigned char*)malloc(sizeof(unsigned char)*n); ????int?i; ????if(fp == NULL) ????{ ????????printf("open file [%s] failed.\n", fileName); ????????return; ????} ????fread(buf, sizeof(unsigned char), n, fp); ????fclose(fp); ????printf("%s:\t", fileName); ????for(i = 0; i < n; i++) ????{ ????????printf("%x\t", buf[i]); ????} ????printf("\n"); ????free(buf); } void?main() { ????char?fileName[][50] = {"ansi.txt", "unicode.txt", "ubigendian.txt", "utf8.txt"}; ????int?i; ????for(i = 0; i < 4; i++) ????{ ????????// 每個(gè)文件中的內(nèi)容都是:你what123456 ????????readNBytes(fileName[i], 3); ????} } |
每個(gè)測(cè)試文件中的內(nèi)容都是:你what123456
運(yùn)行結(jié)果為:
ansi.txt:?????? c4????? e3????? 77
unicode.txt:??? ff????? fe????? 60
ubigendian.txt: fe????? ff????? 4f
utf8.txt:?????? ef????? bb????? bf
總結(jié)
- 上一篇: 成都大熊猫繁育基地对警察免费吗
- 下一篇: 云游戏是有哪些类型的游戏?