今天我在做MSMQ消息发送的时候,发现收到的消息老是说反序列化失败;于是我用另外的MSMQ测试工具把要发送的报文贴进去,再发送到MSMQ,在MSMQ里面发现2种方式接收到的同一个消息居然长度不一致;

于是我采用了beyondcompare的2进制比较模式打开消息模板文件(.txt),发现在<?xml 之前果然多了3个16进制符号;联想起以前遇到过的一个问题,才晓得是UTF-8的标志符号;

于是我将TXT另存为ANSI格式,这个标志就去掉了,消息也可以正常使用了。

还是不甘心,在网上搜了一些资料,贴在下面,便于以后提醒自己:

Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明:

在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-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的ef bb bf了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。

如果想去掉bom,如果只包含英文字符(或者说ASCII编码内的字符),就把文件存成ASCII码方式吧。用UE等编辑器的话,点文件->转换 ->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择“UTF-8 无 BOM”即可。

根据Bo-Blog的wiki的说明:Editplus需要先另存为gb,再另存为UTF-8。不过这样做要小心,所有GBK编码中不包含的字符就会都丢了。如果有一些非中文的字符在文件里的话还是不要用这种办法了。(从这一个小方面来看,UE——UltraEdite-32确实比Editplus 好很多,Editplus太轻量级了)

另外我发现了一个办法,就是利用Wordpress提供的文件编辑器。这个办法不受限制,不需要去下载专门的编辑器,毕竟大家都在用 Wordpress嘛。先在ftp里把要编辑的文件的写入权限打开,然后进入Wordpress后台->管理->文件编辑器,输入要编辑文件的路径,点编辑文件。在显示出来的编辑界面中,你是看不到开头的那三个字符的,不过没关系,把光标定位在整个文件的第一个字符前,按一下 Backspace键。OK了,点更新文件吧,在ftp里刷新一下,可以看到文件小了3字节,大功告成。

EF BB BF的问题相关推荐

  1. UTF-8 BOM(EF BB BF)

    原标题:link标签和script标签跑到body下面,网页顶部有空白,出现"锘匡豢"乱码,UTF-8 BOM,EF BB BF 来自:http://tunps.com/link- ...

  2. EF BB BF 文本文件开头 iniparser

    文本文件开头有3个字节,EF BB BF ,这3上字节是windows加上的,好像是UTF8的一个标志,如果保存ANSI格式的话,就不会有这3个字节, 我在linux上调试iniparser软件,一直 ...

  3. java处理中文字符_Java中文字符处理的四大迷题

    虽然计算机对英文字符的支持非常不错,我们也恨不得写的程序只会处理英文的数据,但是昨为中国人,无可避免地要处理一些中文字符.当很简单的一件事情,遇到了中文,一切就不同了!本文就会讲述实际生产环境中遇到的 ...

  4. 编码小记(未整理-持续更新)

    ----------------基本概念------------------------------- 一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个"0&q ...

  5. JavaSE--jdom解析之bom

    参考:http://www.cnblogs.com/findumars/p/3620078.html 1 org.jdom2.input.JDOMParseException: Error on li ...

  6. DOS、Mac 和 Unix 文件格式+ UltraEdit使用

    文件格式 区分DOS.Mac 和 Unix分别对应三种系统 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种 文件模式 区分ASCII模式和Binary模式  通常由系统决定,大多数 ...

  7. 字符编码简介 ANSI Unicode Unicode big endian UTF-8

    1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和 1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte) ...

  8. java下输出中文的一点研究

    网上或者大部分书上都说Java中输出中文使用FileReader类就可以了,但是当你读取一个中文文档时,你会发现,除了乱码,还是乱码.究其原因,这其实是文件流读取时使用的编码方式和文件本身编码方式不同 ...

  9. C#保存文件为无BOM的utf8格式

    如图所示,发现用C#的 File.WriteAllLines 方法,无论怎么设置,最终生成的文件都是 PC utf8,也就是CRLF,用SVN进行提交的时候,显示左侧为utf8,右侧为utf8 BOM ...

  10. Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完整实例

    这个实例在windows.OS X.IOS和Android等平台运行正常. 本文参考这个网站提供的方法:http://zarko-gajic.iz.hr/firemonkey-mobile-andro ...

最新文章

  1. js室内地图开发_如何使用JS来开发室内三维地图的轨迹回放功能
  2. java工程打包时进行签名_使用Java SDK实现离线签名
  3. oracle本地连接地址,关于Oracle本地连接出现与监听有关的问题的解决方法探讨,oracle本地连接...
  4. 如何从0到1打造一款AI产品?
  5. ​HealthKit开发快速入门教程大学霸内部教程
  6. 组合模式_[设计模式]10.组合模式
  7. 模拟分发扑克牌(python实现)
  8. Java命令行界面(第28部分):getopt4j
  9. 使用增强回归树和随机森林模型进行溪流水质预测--文献阅读
  10. java IO流的一些操作方法
  11. 【图像处理】MATLAB:空间滤波
  12. javascript比较日期
  13. Error starting ApplicationContext. To display the auto-configuration report re-run your application
  14. kettle oracle数据从库到库,kettle 使用oracle数据库当做资源库
  15. ContentProvider实现流程
  16. 【赛尔AAAI2021】小样本学习下的多标签分类问题初探
  17. 阿里maven仓库地址
  18. 从移动硬盘安装计算机系统文件,硬盘之前做成了移动硬盘,现在装回电脑上重装系统时分区认不到盘,怎么办?...
  19. HTML 前后端分离,再谈前后端分离开发和部署
  20. 手机共享计算机网络连接,电脑和手机网络的相互共享

热门文章

  1. Mac 连过的 WiFi 怎么查密码?看这→
  2. The /usr/local/mysql/data directory is not owned by the 'mysql' to '_mysql' user
  3. CF 559B Equivalent Strings 分治05 A题
  4. SpringCloud微服务云架构构建B2B2C电子商务平台之-服务的注册与发现Eureka
  5. LintCode 寻找旋转排序数组中的最小值 II
  6. 重读《JAVA与模式》之二
  7. (转)ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
  8. 创业公司如何做到零成本实现用户快速增长
  9. asp.net中DataGrid双行跨列表头设计心得
  10. 不少同学想要放弃秋招了........