目前我正在使用DataInput/OutputStream的方式在網絡上傳輸字符串。我正在傳輸的字符串需要轉換爲一個字節數組,才能解密。如何從DataOutputStream.writeUTF()讀取時獲取Java字符串的「原始」字節?
但是,由於使用DataOutputStream.writeUTF(「foobar」)編寫字符串時,其字節數組包含編碼的Java修改的UTF-8數據,這會填充加密過程。
如何從Java修改的UTF-8字符串中獲取原始字節?
目前我正在使用DataInput/OutputStream的方式在網絡上傳輸字符串。我正在傳輸的字符串需要轉換爲一個字節數組,才能解密。如何從DataOutputStream.writeUTF()讀取時獲取Java字符串的「原始」字節?
但是,由於使用DataOutputStream.writeUTF(「foobar」)編寫字符串時,其字節數組包含編碼的Java修改的UTF-8數據,這會填充加密過程。
如何從Java修改的UTF-8字符串中獲取原始字節?
Unicode有幾個變體,其中s-with- ^可以是一個字符或兩個:s plus combined- ^。 Java有一個Normalizer類來轉換爲一個特定的變體。 請參閱http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html 或立即查看API。
這要求原始字符串符合一個變體。一個不能接收字節,然後將它們解釋爲UTF-8,因爲存在非法序列。這是爲了防止在字節序列中間識別錯誤的字節/字符。
String normalizedString = Normalizer.normalize(s, Normalizer.Form.NFD);
如果你寫你的字符串作爲字節[],並把它讀作[]使用字節http://docs.oracle.com/javase/1.4.2/docs/api/java/io/DataOutputStream .html#write(byte [],int,int)