\uFEFF

1、问题

今天在做下载 Excel 文件,解析数据时,遇到一个奇葩问题。

文件格式大致长这样

我们是要解析这个 Excel 文件,然后用 map.get("订单号") 这种方式获取每一列的值,结果后面列都能正常获取,只有第一列获取结果为 null 。

后来控制台打印结果看起来也正常,把打印的结果复制在粘贴到代码里之后发现多了一个 \uFEFF 符号,也就是要用 map.get("\uFEFF订单号") 这种方式才能获取到值。

2、分析原因

经过和提供 Excel 文件的第三方沟通他们的原因:

三方为了兼容中文格式问题,确保读取到的文件内容格式都是 utf8 格式的,在文件内容头里带上了加 BOM 的 utf8,加完之后读取第一列需要 map.get(\uFEFF商户订单号) 这样读取。

BOM(Byte Order Mark,字节顺序标记,出现在文本文件头部,Unicode 编码标准中用于标识文件是采用哪种格式的编码),Java在读取 Unicode 文件的时候,会统一把 BOM 变成 “\uFEFF”。

到这里基本就能大概明白为啥只有第一列会出现问题了,因为只会在文件头出现,问题也就找到出在哪了。

3、解决方案

解决办法就是:我们获取第一列值得时候稍微做了一下调整,用下面方式获取就正常了。

map.get(\uFEFF商户订单号)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值