zoukankan      html  css  js  c++  java
  • 字节顺序标记BOM

    最近,从numbers导出的csv文件,导入excel后,出现中文乱码问题。网上查询后,发现是numbers导出的csv默认是utf-8无BOM的,使用sublimText3打开,另存为utf-8withBOM格式,再使用excel打开,就可以正常识别中文。那么,今天就来回顾一下BOM吧~

    Big-Endian和Little-Endian

    Big-Endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是Big-Endian。如果将49写在前面,就是Little- Endian。

    BOM

    BOM(Byte Order Mark)字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码。

    • Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。
    • 在UCS编码中有一个叫做 "Zero Width No-Break Space"(零宽无间断间隔)的字符,它的编码是FEFF。而FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。
    • UCS规范建议我们在传输字节流前,先传输字符 "Zero Width No-Break Space"。这样如果接收者收到 FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 "Zero Width No-Break Space" (零宽无间断间隔)又被称作 BOM

    UTF的字节序和BOM

    UTF-8以字节为编码单元,没有字节序的问题。但是可以使用BOM来表明编码方式,字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码。Windows的笔记本软件、excel就是使用BOM来识别UTF-8.

  • 相关阅读:
    vs2010装虚拟机后启动慢
    LINUX FIFO(读书笔记,LINUX程序设计第四版)
    WPF控件 ProgressBar
    C# SQLite操作示列
    win10下使用Linux命令
    类初始化与实例化过程
    结构与类 Delphi
    多线程应用 Delphi
    (珍藏)SQL Server中常用的SQL语句
    获取当前用户本地应用程序设置文件夹 Delphi
  • 原文地址:https://www.cnblogs.com/amyzhu/p/8291173.html
Copyright © 2011-2022 走看看