BOM——Byte Order Mark 字节序标记

  首先是什么是字节序? 字节序:与二进制数据在机器存放位置相关的! 可分为两类:

    1. 小端字节序: 低地址放低位数据。 x86系列的计算机就使用这种字节序

    2. 大端字节序: 低地址放高位数据。 ibm系使用

举个例子..  写个简单程序来看看自己电脑使用神马字节序存放数据的!

#include <stdio.h>

int main(int argc, char const *argv[])
{
FILE *fp = NULL;
int data = ; // 1A9EA
if((fp = fopen("m.data", "wb+")) != NULL) {
fwrite(&data, sizeof(int), , fp);
}
fclose(fp);
return ;
}

  使用16进制编辑器(Nodepad++安装个HexEditor即可) 查看程序生成的m.data文件!

  结果如下:   从左到右地址递增

    ea a9 01 00

  可以看出: data变量的ea字节存放在m.data低位字节, 因此本人的机器是使用小字节序存放数据的。

  

回到正题, UTF-8编码本身是不需要使用BOM来表明字节顺序,但可以用BOM来表明编码方式。也就是告诉编辑器知道它是个utf-8之外什么用处都没有。带BOM文件特征:以 EF BB BF开头

BOM本是为 UTF-16 和 UTF-32 准备的,用于标记字节序。  对于多系统(多语言)使用者来说, 带BOM的UTF-8简直就是一场灾难。可以参考:UTF8最好不要带BOM,附许多经典评论

%>_<%: 感觉立了个 flag,今天(2016-09-28)碰到一个破系统... 上传的文件必须得是 UTF-8-BOM 格式的

String bomStr = new String(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF}, Charset.forName('UTF-8')); // 加上这破玩意就行了

另外:   检测文件编码这个功能看着容易,实际很难! 就举个最最简单的例子: 创建一个信息量很小的gbk编码的文件,内容就一字: “键” 。

  1. 使用nodepad++打开虽然没乱码,但是右下角为ANSI编码

  2. 使用sublime text 3(带ConvertToUTF8插件)打开, 结果是乱码! 需要自己选择合适的编码方式打开

  3. 使用python的chardet库来查看文件的编码, 结果输出: {'confidence': 0.73, 'encoding': 'windows-1252'}

So, 在项目中一定要统一文件的编码! 这至关重要

  

BOM-字节序标记的更多相关文章

  1. 刨根究底字符编码之十一——UTF-8编码方式与字节序标记

    UTF-8编码方式与字节序标记 一.UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式:UTF-8.UTF-16.UTF-32.这里先介绍应用最为广泛的UTF-8. 为满足基 ...

  2. LITTLE-ENDIAN(小字节序、低字节序) BOM——Byte Order Mark 字节序标记 数据在内存中的存放顺序

    总结: 1. endian 字节存放次序 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了). 2. LITTLE-ENDIA ...

  3. Unity字节序问题

    问题 Unity中有些配置信息并不想在发布之后给其他人看到,所以在打包的时候进行了简单的编码处理,然后保存为.bytes类型,读取的时候再进行解码处理.今天遇到的很奇葩的问题是: 如果bytes文件U ...

  4. 字节顺序标记——BOM,Byte Order Mark

    定义 BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码.     介绍 UTF-8 不需要 BOM,尽管 Unico ...

  5. 字节顺序标记BOM

    最近,从numbers导出的csv文件,导入excel后,出现中文乱码问题.网上查询后,发现是numbers导出的csv默认是utf-8无BOM的,使用sublimText3打开,另存为utf-8wi ...

  6. BOM (字节顺序标记)

    BOM(Byte Order Mark):字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码. 注:计算机内部数据存储都是二进制的,只有知道一段数据的二进制存储 ...

  7. 字节序转换与结构体位域(bit field)值的读取

    最近又遇到了几年前遇到的问题,标记一下. 对于跨字节位域(bit field)而言,如果数据传输前后环境的字节序不同(LE->BE,BE->LE),简单地调用(ntohs/ntohl/ht ...

  8. [Linux]关于字节序的解析

    剥鸡蛋的故事 <格列佛游记>中记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的姿势有关. 很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作“大端(Big endian) ...

  9. 大小端,"字节序"

    2 字节序 2.1 字节 字节(Byte)作为计算机世界的计量单位,和大家手中的人民币多少多少“元”一个意思.反正,到了计算机的世界,说字节就对了,使用人家的基本计量单位,这是入乡随俗. 比如,一个电 ...

随机推荐

  1. C#_字符串的操作

    1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: ...

  2. Cocoa Touch的3种类的交流方式delegate/target/notification

    1. Delegate 在Cocoa Touch类对象运行的周期中,某一个时间点它会去调用一些指定类的指定函数来完成他自身所要完成的功能.这个”指定的类”,就称为这个类的委托类.”指定函数”则是一些在 ...

  3. Python调用Webservice、访问网页

    昨天在调试Webservice的时候,由于不想写测试程序,就想用Python访问Webservice,结果还是相当的麻烦.远没有VSIDE用的方便 不得不说VS还是很强大的,人性化做的很好,不需要你看 ...

  4. c++错误修复 数据库无法打开 无法右击 run outtiime

    先前有安装vs2015失败的前提 现象:1.无法右击  显示 explorer.exe   c++        run outtiime  这些字样 2. 安装有数据库的软件都不能用.显示数据库连接 ...

  5. WIN7实用的运行命令

    运行命令主要是DOS操作系统的运行方式.为方便用户的操作,微软公司将一些常用的命令,如DIR,CD等命令全部集成在系统里面:存放这些内部命令的文件是“Command”(文件后缀.com).它与IO.s ...

  6. asp.net全局记住值

    每个网页都要记住名字和密码! 在Page_Load中写如下代码: Session[“起个名字”]=要赋值的; 在显示的时候写 Response.write(Session[“当时起的名字”.ToStr ...

  7. OpenGL1-6讲小结

    首先是第一讲,GL窗体的搭建,依葫芦画瓢,很多代码虽然解释了,最后看起来还是比较生涩.一开始按照上一篇的链接去敲的代码,结果最后while死循环了,我也不知道问题出哪儿,后来去找了个源码,还附带了更加 ...

  8. POJ 1273(EK)

    题目大概意思是,有N条水沟和M个水池,问从第一个水池到最后一个水池在同一时间内能够流过多少水第一行有两个整数N,M接下来N行,每行有3个整数,a,b,c,代表从a到b能够流c单位的水超级模板题,一个有 ...

  9. Regionals 2013 :: North America - Southeast USA

    Regionals 2013 :: North America - Southeast USA It Takes a Village As a Sociologist, you are studyin ...

  10. Vim 保存和退出命令

    命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中. :w! 强制写文件,即强制覆盖原有文件.如果原有文件的访问权限不允 ...