0
点赞
收藏
分享

微信扫一扫

导出CSV后,时间字段无法自动识别-0xEF,0xBB,0xBF

认真的老去 2022-03-12 阅读 64
java

背景

项目组做csv导出时,发现有些行的日期字段没办法自动识别,如下图所示
在这里插入图片描述
即使手工调整格式也不行
在这里插入图片描述
后面写了一个测试代码,对比问题行的二进制,发现有问题的行比没有问题的行多了3个字节;-17,-69,-65,转换成16进制就是0xEF,0xBB,0xBF。(问题行日期字段里面的值因为多了这三个字节,不能很好的被识别成日期。)
然后百度这三个字节,发现这个三个字节放在文件头可以解决csv中文乱码问题。

0xEF,0xBB,0xBF

在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来标记文本文件的编码方式的。

举报

相关推荐

0 条评论