windows自带记事本引致文本文件(UTF-8编码卡塔 尔(英语:State of Qatar)起首八个字符乱码难点,文本文件utf-8

转自:

windows自带记事本导致文本文件(UTF-8编码)开头三个字符乱码问题,文本文件utf-8

转自:

在windows平台下,使用系统的记事本以UTF-8编码格式存储了一个文本文件,但是由于Microsoft开发记事本的团队使用了一个非常怪异的行为来保存UTF-8编码的文件,它们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,所以我们就会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报出语法错误,等等。

下面为一段测试程序,由记事本编辑的文本文件导致文件开头前三个字符乱码。

图片 1

#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;
}

图片 2

 

输入文件:

图片 3

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

图片 4

 

输出文件:

图片 5

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

图片 6

 

我们可以发现文件开头三个字符乱码,每个汉字占用两个字符,因此第4个字符本来为‘t’,也只能乱码显示出来。

因此,可以使用Notepad++代替记事本。需要将Notepad++的默认编码设置为UTF-8
without BOM即可;

图片 7

转自:
在windows平台下…

简书:http://www.jianshu.com/p/34b261d23998
CSDN博客:
http://blog.csdn.net/qq\_32115439/article/details/77017377
GitHub博客:
http://lioil.win/2016/04/10/Windows-Notepad.html
Coding博客:
http://c.lioil.win/2016/04/10/Windows-Notepad.html

在windows平台下,使用系统的记事本以UTF-8编码格式存储了一个文本文件,但是由于Microsoft开发记事本的团队使用了一个非常怪异的行为来保存UTF-8编码的文件,它们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,所以我们就会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报出语法错误,等等。

2016/04/10
今天真是气煞我也,这个Windows10的破记事本编辑器浪费我太多时间,亏我还是Win10脑残粉……

下面为一段测试程序,由记事本编辑的文本文件导致文件开头前三个字符乱码。

原本只想快速修改jekyll博客首页的Html文档,就用记事本打开,随便改改,改完不忘以UTF-8编码保存。
去预览博客首页,准备吃饭……

图片 8

结果首页侧边栏布局全不见了了了……只留下极其丑陋的纯文本,中英文显示完全正常,就是网站识别出错……
改了半天还是没变,最后只好删除所有中文,以ANSI编码保存,预览博客完全正常……

#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;
}

以UTF-8编码保存博客就是显示异常,折腾一个多小时……
只好安装Notepad++,UTF-8编码的首页侧边栏终于恢复正常了……
对这破记事本的最后残恋终于破灭了……

图片 9

2017/1/25追加:
UTF-8编码分为UTF-8和UTF-8-BOM两种,
UTF-8-BOM只是在文件开头增加了0xef 0xbb 0xbf三个字节标识符号,
Windows记事本编码UTF-8默认添加了BOM标识符,
有些软件无法识别BOM标识符而出现乱码, 我估计jekyll博客也不能识别BOM!

 

输入文件:

图片 10

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

图片 11

 

输出文件:

图片 12

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

图片 13

 

我们可以发现文件开头三个字符乱码,每个汉字占用两个字符,因此第4个字符本来为‘t’,也只能乱码显示出来。

因此,可以使用Notepad++代替记事本。需要将Notepad++的默认编码设置为UTF-8
without BOM即可;

图片 14

发表评论

电子邮件地址不会被公开。 必填项已用*标注