用于将String转换为Hex的Wich charset?

时间:2016-10-03 13:03:33

标签: java string hex

我使用此代码将String转换为Hex值

public static String toHex(String arg) throws UnsupportedEncodingException {
    return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}

代码似乎工作正常,但我不理解评论

/*YOUR_CHARSET?*/

我应该放在那里?

2 个答案:

答案 0 :(得分:2)

  

代码似乎工作正常,但我不理解评论   / YOUR_CHARSET?/?我应该放在那里吗?

方法String#getBytes()通过使用平台的默认字符集对其进行编码,将String转换为array of bytes。调用String#getBytes()是有风险的,因为它会使您的代码依赖于平台,如果您更改平台会导致解码问题,这就是为什么强烈建议使用String#getBytes(charset)来明确指定目标字符集以这种方式正常工作,无论平台使用什么假设指定的字符集可以正确覆盖要编码的String的所有字符。实际上,如果您在String中使用了突出显示的字符,并且使用了非匹配的字符集,例如ASCII,则稍后会出现解码问题。

答案 1 :(得分:0)

你可以决定,但不管你决定什么,你必须告诉接收者或者你没有通信。或者,如果您遵循规范,请参阅该规范。

此外,您可能希望对覆盖数据的字符集使用编码,否则某些字符将替换为问号。鉴于Java String的字符集是Unicode,Unicode的UTF-8编码是一个明显的选择。