坑爹的UTF-8-BOM编码

前言

今天从一个txt文本读取第一行,只有一个数字0。
可是读取后int.Parse()的时候报错:Input string not valid
断点跟踪了一下,读出来的是个数字。也没有空格什么的。
再打印一下Length,发现Length是2。
fuck。
既然是Length是2我给你ToArray()看看具体的字符。
fuck again。ToArray()报错:Input string not valid
于是想起来可能是BOM头的原因。
Notepad看看,果不其然:
在这里插入图片描述

解决方法

再看看生成这个txt文本的代码:
File.WriteAllText(path, content.TrimEnd(), Encoding.UTF8);

改成:
File.WriteAllText(path, content.TrimEnd(), new UTF8Encoding(false));
生成的文本就是no-BOM的了。

补充

另外经过测试,通过以下流的方式生成的txt是no-BOM的:

//将string转为byte数组
byte[] array = Encoding.UTF8.GetBytes(content.TrimEnd());
//创建一个文件流
FileStream fs = new FileStream(path, FileMode.Create);
//将byte数组写入文件中
fs.Write(array, 0, array.Length);
fs.Close();

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值