计算字符串Hash摘要时的注意事项

在计算字符串的Hash摘要时,一定要注意字符串的编码,使用Charset.defaultCharset()查看JVM的默认字符编码。
不同字符串编码算出来的Hash值是不一样的。
可以使用StringBuilder构建字符串,然后转码为固定的String

StringBuilder mingxiSb = new StringBuilder();
String mingxi = new String(mingxiSb.toString().getBytes(), "utf-8");
org.apache.commons.codec.digest.DigestUtils.sha256Hex(mingxi.getBytes("utf-8")).toUpperCase();

使用以下代码进行编码转换时可能导致乱码,具体原因搜索GBK转UTF-8乱码

String mingxi = new String(mingxiSb.toString().getBytes(), "utf-8");

所以结论是不要尝试进行GBK与UTF-8的编码转换,在程序编写初期就应该统一编码格式。
我写这篇博文的情况是两个不同系统进行对接,一个是Windows,一个是Linux。
最根本的解决方式,是在系统的环境变量中配置变量名为JAVA_TOOL_OPTIONS,变量值为-Dfile.encoding=UTF-8。
或者在Tomcat中配置Java启动参数为-Dfile.encoding=UTF-8。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值