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. SharedPreferences保存用户登录信息

    UI界面:

  2. GridViewDemo

    GridViewDemo:网格示例 GridView标签内定义列宽,android:columnWidth="120dp". getView()内定义每一个ImageView的大小 ...

  3. 符号渲染篇——Symbol

    Symbol 是对 Graphic 对象进行符号样式设置的接口,所有符号样式类都实现了 Symbol 接口. 1.PictureMarkerSymbolPictureMarkerSymbol 是对于点 ...

  4. window.open和window.showdialog区别

    open打开的窗口可以点击切换到其背后的父窗口,dialog的窗口无法点击切换到其背后的父窗口, 假如用window.opener或者parent等对象时,建议用open方法,不要用dialog,否则 ...

  5. 【学习笔记】【C语言】流程控制

    顺序结构:默认的流程结构.按照书写顺序执行每一条语句. 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. 循环结构:在给定条件成立的情况下,反复执行某一段代码.

  6. 移动端边框1px的实现

    查看京东的移动端1px实现原理,用的是:after和css3的scale(0.5)缩放. border-right fr:after{ height:100%; content:' '; width: ...

  7. Sublime Text 2入门指南

    Sublime Text 2入门指南   一天在iteye上看到范凯介绍一个开发工具(TextMate ),看下面的评论时看到Sublime Text 2.其实我一直喜欢editplus.百度了一番才 ...

  8. C# 中有关 using 关键字

    关于 C# 中的 using 关键字 我们往往只在代码的开头使用 using 关键字来引入名称空间,这是 using 的一个最常见的使用. 但是,using 关键字是否只有这么一处用武之地吗? 下面, ...

  9. 记录一次会话CRT

    记录一次会话CRT --------------------- su -oracle sqlplus / as sysdba sqlplus username/password  如:普通用户登录   ...

  10. 3月3日(4) Remove Duplicates from Sorted List

    原题 Remove Duplicates from Sorted List 有序单链表去重,delete 只能对指针起作用. /** * Definition for singly-linked li ...