2016-10-03 186 views
0

我使用此代碼字符串轉換爲十六進制值將字符串轉換爲十六進制的字符集?

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

的代碼似乎很好地工作,但我不明白的評論

/*YOUR_CHARSET?*/ 

那我應該放在那裏?

+0

用'「UTF-8」'試過? –

+1

如果您將它留空,它將使用您系統的默認字符集。你可以改變它,如果你想 –

+1

@JornVernee不要留空。您的平臺的默認字符集可能是EBCDIC或其他字符集,與前127個字符的ASCII碼不同。 –

回答

2

該代碼似乎工作正常,但我不明白的評論 /YOUR_CHARSET?/?我應該放在那裏嗎?

方法String#getBytes()使用平臺的默認字符集編碼其轉換一個Stringarray of bytes。調用String#getBytes()是有風險的,因爲它使您的代碼依賴於平臺,如果您更改了平臺,可能會在稍後導致解碼問題,這就是爲什麼強烈建議使用String#getBytes(charset)來代替以明確指定目標字符集的方式無論使用哪個平臺假設指定的字符集都可以正確覆蓋String的所有字符進行編碼。事實上,如果您在String中突出顯示了字符,並且您使用了非匹配的字符集,例如ASCII,您將在稍後解決問題。

0

你可以決定,但無論你決定,你必須告訴接收器或你在通信失敗。或者,如果您遵循規範,請參閱該規範。另外,您可能希望對包含數據的字符集使用編碼,否則某些字符將被替換爲問號。鑑於Java的String的字符集是Unicode,Unicode的UTF-8編碼是一個明顯的選擇。

相關問題