java getBytes()在Windows(Java9)下正常工作,在Linux下也不工作
方法getBytes()在Windows(Java9)下按预期工作,在Linux下不工作。Characterset()=>;两个系统上都有UTF-8。JVM版本=>;Java 9(我在Linux下测试了open jvm和oracle jvm)
代码:
public static String createSign(String uri, String apiSecret) throws UnsupportedEncodingException{
byte[] signBytes = calculateSignBytes(uri, apiSecret);
return bytesToHexString(signBytes);
}
private static byte[] calculateSignBytes(String uri, String secret) throws UnsupportedEncodingException {
try {
Mac mac = Mac.getInstance(ALGORITHM);
SecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes(), ALGORITHM);
mac.init(secretKeySpec);
return mac.doFinal(uri.getBytes());
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException(e);
}
}
private static String bytesToHexString(byte[] bytes){
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bytes) {
stringBuilder.append(String.format("%02x", b));
}
return stringBuilder.toString();
}
在Windows和Linux下也是如此。我还测试了在windows下编译和导出可执行JAR,并在Linux上运行它,除了上面的代码,所有功能都可以正常工作
# 1 楼答案
请记住始终使用字符集,这样可以避免意外的结果