2013-04-24 70 views
0

特定的CharSet會影響與每個字節關聯的二進制(或整數)值嗎?將Java字節讀爲CharSet

實施例:

String original = foo(); // makes string 

byte[] utf8Bytes = original.getBytes("UTF8"); // CharSet is UTF8 
byte[] defaultBytes = original.getBytes(); // default CharSet 

威爾utf8Bytes[1]總是等於defaultBytes[1]從值的二進制/整數點?

+0

這是很好的做法,始終* *指定的字符集。如果出於某種原因,您確實需要默認字符集,請使用Charset.defaultCharset()來明確您的意圖。 – dnault 2013-04-24 20:48:41

回答

2

它會影響值,並且UTF-8不是所有JVM上的默認值 - 總是使用getBytes("UTF-8")來確保編碼是一致的。

例如,使用getBytes("UTF-8")getBytes("UTF-16")並比較結果(後者可能將有兩倍多字節在前)

+0

如果一個方法返回一個'byte []',我怎麼知道它的'CharSet'?示例:'public static byte [] sha(byte [] data)'http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html#sha% 28byte []%29 – 2013-04-24 20:48:44

+0

@Kevin sha()方法對一個字節數組進行操作。在字節數組上操作時,CharSets是無關緊要的(直到你將它們轉換爲字符串)。 – dnault 2013-04-24 20:49:44

+0

根據[這個線程](http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream),[這個庫](http: //code.google.com/p/juniversalchardet/)可以提供幫助 - 它不能保證能夠檢測到編碼,但它通常可以。 – 2013-04-24 20:51:01