windows自帶記事本導致文本文件(UTF-8編碼)開頭三個字符亂碼問題


轉自:http://www.cnblogs.com/zhbzz2007/p/4283194.html

在windows平台下,使用系統的記事本以UTF-8編碼格式存儲了一個文本文件,但是由於Microsoft開發記事本的團隊使用了一個非常怪異的行為來保存UTF-8編碼的文件,它們自作聰明地在每個文件開頭添加了0xefbbbf(十六進制)的字符,所以我們就會遇到很多不可思議的問題,比如,網頁第一行可能會顯示一個“?”,明明正確的程序一編譯就報出語法錯誤,等等。

下面為一段測試程序,由記事本編輯的文本文件導致文件開頭前三個字符亂碼。

復制代碼
#include <stdio.h>
#define MAX_LEN 100

int main()
{
    char strLine[MAX_LEN];
    int i = 0;
    memset(strLine,0x0,MAX_LEN);

    FILE * fp;
    fp = fopen("eng_query.txt","r");
    if(NULL == fp)
    {
        printf("open file fail.\n");
        return -1;
    }

    while(fgets(strLine,MAX_LEN,fp))
    {
        printf("str = %s",strLine);//將每行字符串打印出來
        for(i=0; i<strlen(strLine); i++)//將每各字符串中的字符以十六進制格式打印出來
        {
            printf("%x  ",strLine[i]);
        }
        printf("\n\n");
    }
    fclose(fp);
    return 0;
}
復制代碼

 

輸入文件:

復制代碼
tsinghua press
mp18
evaluating method for the double image
jiaoyuxvshi
balancing mechanism
hthr
amplification
bionic optimization algorithm
a r l
tcb
復制代碼

 

輸出文件:

復制代碼
str = 鍩縯singhua press
ffffffef  ffffffbb  ffffffbf  74  73  69  6e  67  68  75  61  20  70  72  65  73
  73  a

str = mp18
6d  70  31  38  a

str = evaluating method for the double image
65  76  61  6c  75  61  74  69  6e  67  20  6d  65  74  68  6f  64  20  66  6f
72  20  74  68  65  20  64  6f  75  62  6c  65  20  69  6d  61  67  65  a

str = jiaoyuxvshi
6a  69  61  6f  79  75  78  76  73  68  69  a

str = balancing mechanism
62  61  6c  61  6e  63  69  6e  67  20  6d  65  63  68  61  6e  69  73  6d  a

str = hthr
68  74  68  72  a

str = amplification
61  6d  70  6c  69  66  69  63  61  74  69  6f  6e  a

str = bionic optimization algorithm
62  69  6f  6e  69  63  20  6f  70  74  69  6d  69  7a  61  74  69  6f  6e  20
61  6c  67  6f  72  69  74  68  6d  a

str = a r l
61  20  72  20  6c  a

str = tcb
74  63  62  a
復制代碼

 

我們可以發現文件開頭三個字符亂碼,每個漢字占用兩個字符,因此第4個字符本來為‘t’,也只能亂碼顯示出來。

因此,可以使用Notepad++代替記事本。需要將Notepad++的默認編碼設置為UTF-8 without BOM即可;

0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM