window字符编码问题导致的Linux上线事故

事故背景:openjdk与jdk引发的惨案

项目测试初期,服务器使用了Docker的环境
image.png
Dockerfile文件如下
image.png
本地采用的是jdk8
当高高兴兴写好shell脚本并跑了起来的时候,前端那边开始出问题了,项目开始抛出异常(项目使用的是谷歌的),maven如下:

<dependency>
     <groupId>com.github.penggle</groupId>
     <artifactId>kaptcha</artifactId>
     <version>2.3.2</version>
</dependency>

当时报错的时候,就很纳闷,究竟哪里出了问题,
后来发现
image.png
错误来自于这里,于是本地开始调试
image.png
本地swagger出现的base64,都能够解码成功
如下
image.png
后来大胆猜测了一下,openjdk的问题,因为之前出现过在生成Excel时候由于openjdk缺少字体库支持不能生成文件。
于是,把openjdk换成jdk8,它可以生成base64了!!!
它生成之后,就没管它了,直到前端小朋友再次去使用的时候,发现base64还是不能转成图片,如下:
image.png
接下来进入本文正题

事故:编码问题

当时出现这个问题的时候,自己也很纳闷,到底又是哪里出了问题?
于是乎,我将服务器上的base64与本地同样的base64做了对比,发现服务器中的base64编码中莫名其妙的出现了很多 ’ \ '这种特殊字符,于是,再次根据经验再次大胆猜测,可能是windows与linux的编码格式问题。
原来我的代码是这样的:

String captchaBase64 = "data:image/jpeg;base64," + base64.replaceAll("\r\n", "");

注意看后面的’ \r\n ’
由于linux的编码问题,我改成了

String captchaBase64 = "data:image/jpeg;base64," + base64.replaceAll("\r|\n", "");

这样就可以支持windows与linux了。
问题解决!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值