从DataOutputStream.writeUTF()读取时如何获取Java String的“原始”字节?

时间:2011-12-27 04:48:32

标签: java encoding utf-8 ascii

目前我正在使用DataInput / OutputStream在网络上传输字符串。我传输的字符串需要转换为字节数组,以便解密。

但是,由于当使用DataOutputStream.writeUTF(“foobar”)编写字符串时,其字节数组包含编码的Java Modified UTF-8数据,这会填充加密过程。

如何从Java修改的UTF-8字符串中获取原始字节?

2 个答案:

答案 0 :(得分:0)

Unicode有几种变体,其中s-with-^可以是一个字符或两个字符:s加上combination-^。 Java有一个Normalizer类可以转换为一个特定的变体。 见http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html 或立即查看API。

这要求原始字符串遵循一个变体。一个人不能接受字节,然后将它们解释为UTF-8,因为存在非法序列。这样做是为了防止在字节序列中间识别错误的字节/字符。

String normalizedString = Normalizer.normalize(s, Normalizer.Form.NFD);

答案 1 :(得分:0)

如果您将字符串写为byte []并使用http://docs.oracle.com/javase/1.4.2/docs/api/java/io/DataOutputStream.html#write将其读取为byte [],该怎么办? (byte [],int,int)