最近在写一个通过邮箱发送sbd二进制附件程序的时候,遇到了一个小问题,就是在附件中出现0A的地方系统会自动在前面添加一个0D。
网上的资料说Windows下0x0A和 0x0D 加在一起表示的是换行,如果没有用二进制形式打开文件,遇到0X0A时,它会把它默认做换行标志然后给你补上0X0D。
(15条消息) 关于fwrite 读写出现多余字节的问题_Li X的博客-优快云博客https://blog.youkuaiyun.com/LX370ZZZ/article/details/85235149
(15条消息) 网络传输中文本传输与二进制传输与字符集_ccfboy的博客-优快云博客https://blog.youkuaiyun.com/ccfboy/article/details/6170538下面是邮件添加附件的代码,将字节数组打包成ByteArrayDataSource添加到附件,可以看出是以text的格式写入附件,所以就会造成上述的问题。
ByteArrayDataSource dataSource = new ByteArrayDataSource(fileContent, "text/plain");
helper.addAttachment(MimeUtility.encodeWord(fileName, "utf-8", "B"), dataSource);
javaMailSender.send(mimeMessage);
所以我们只要将“text/plain”改为“application/octet-stream”就可以用二进制方式写入附件,从而解决0A前自动添加0D的问题。当然二进制类型不仅只有上述的这一种,具体大家可以参考下面的链接。