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

在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即可;

时间: 2025-01-16 17:24:50

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

Windows不要使用记事本编辑文本文件

摘自:廖雪峰 千万不要使用Windows自带的记事本编辑任何文本文件.原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的.建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without

替换Windows系统自带记事本

Windows自带的记事本打开一些简单的短小文本不错,但自带的这个记事本相应的也很残.比如查找替换功能,比如编码格式兼容问题- 为了使记事本使用更方便,我们有不少替代方案,比如 notepad2,notepad++,ultraedit- 个人比较喜欢notepad2-mod,替换分两种,一种直接改名为notepad.exe替换文件,另一种则是使用映像劫持,将名称为notepad.exe的进程劫持到我们指定的程序,以此实现启动记事本时打开我们要的notepad2.exe. 替换文件 Windows

[转]Perfmon - Windows 自带系统监测工具

以下内容转自:http://blog.csdn.net/oscar999/article/details/7918385 ---------------------------分割线-------------------------------------- 一. 简述 可以用于监视CPU使用率.内存使用率.硬盘读写速度.网络速度等. Perfmon提供了图表化的系统性能实时监视器.性能日志和警报管理,系统的性能日志可定义为二进制文件.文本文件.SQLSERVER表记录等方式,可以很方便地使用第

Linux下打开Windows环境下创建的文本文件显示中文乱码问题

产生原因: Linux下打开Windows环境下创建的文本文件出现中文乱码,因为两种操作系统的中文压缩方式不同,在Windows环境下中文编码一般为GBK,而在Linux环境中为UTF-8,这就导致了在Windows下能正常显示的文件在Linux环境下打开出现了乱码. 解决方法: 使用iconv命令, 命令语法:iconv -f fromcode [-cs] [-t tocode [file ...] 假设乱码文件名为Hello.c,那么在终端可使用如下命令进行格式转换: iconv -f GB

用Wireshark抓包来揭开ftp client GG和ftp server MM的勾搭内容并用C代码来简要模拟实现Windows自带的ftp client

前面, 我们玩过http, 颇有点意思, 在本文中, 我们继续来玩ftp(file transfer protocol).   http和ftp都是建立在tcp之上的应用层协议, 无论他们怎么包装, 怎么装bigger, 最终还是基于tcp端到端传输的.本文主要分为两个部分: 一. 用Wireshark抓包来揭开ftp client GG和ftp server MM的勾搭内容.二.用C代码来简要模拟实现Windows自带的ftp client. 说明, 本文中的实验, 我用了两台电脑, 分别是p

Windows自带磁盘管理工具——diskpart

今天帮一个同事装系统因为之前预装是win10的,很多软件不够不能兼容需要安装成win7的,可是在win8和之后的系统磁盘分区都是使用gpt的引导方式,想要使用低版本的系统就要从新对磁盘分区表转换修改,可是很多的第三方工具和pe都不能很好的对磁盘进行修改管理,那么此时就要使用Windows自带diskpart工具来管理磁盘,众所周知数据库就是在磁盘的基础上的产物,那么管理磁盘就和数据库一样的,diskpart是Windows环境下的一个命令,正常运行该命令时需要系统服务的支持,这几个服务是:Log

c# 使用windows自带winmm.dll 播放音频

今天帮同事完成一个C#应用程式,用户需要在点击完成后发出指定声音.我们使用windows 自带的winmm.dll,这样就不用到处找库了,利有系统播放音频功能完成开发. 下面是完整的核心代码: 1 using System.Runtime.InteropServices; //DllImport的命名空间 2 [DllImport("winmm.dll")]privatestaticexternlong mciSendString(string lpstrCommand,StringB

Windows Phone 带文本信息的进度条

2. [图片Windows Phone 带文本信息的进度条 详细说明:http://wp.662p.com/thread-7980-1-1.html

用Windows自带的画笔工具调整图片的大小

作者:iamlaosong 帮朋友上传资料,其中拍摄的图片太大,无法上传,需要缩小,朋友的电脑上也没什么图像处理工具,只有Windows自带的画笔工具,那么用这个工具能否调整图像大小呢?答案是肯定的,方法如下: 1.用画笔打开要缩小的图片文件: 2.点击"图像"菜单下的"拉伸/扭曲"功能,输入缩小的水平和垂直比例,可以缩小,也可以放大: 3.确定后,画笔就按输入的比例生成了新的图片: 4.另存新图片到新文件中. 5.试验了一下扭曲功能,发现也很有意思,扭曲后的图片,