我使用此代码将String转换为Hex值
public static String toHex(String arg) throws UnsupportedEncodingException {
return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}
代码似乎工作正常,但我不理解评论
/*YOUR_CHARSET?*/
我应该放在那里?
答案 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编码是一个明显的选择。