2013-04-24 73 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