我在調試將二進制消息轉換爲XML Web服務的第三方網關係統。當它接收到包含特殊字符0x80,0x81,0x82和0x83的消息時,它們不會以XML格式正確發送。在XML中發送非標準字符
我已經將問題縮小到了將byte []轉換爲String的位置,併產生了一個錯誤示例。特殊值全部轉化爲相同的「未知」字符。
public static void main(String[] args) {
test(0x80);test(0x81);test(0x82);test(0x83);
}
public static void test(int value) {
String message = new String(new byte[]{(byte)value});
System.out.println(value + " => " + message + " => " + Arrays.toString(message.getBytes()));
}
輸出
128 => � => [-17, -65, -67]
129 => � => [-17, -65, -67]
130 => � => [-17, -65, -67]
131 => � => [-17, -65, -67]
我不知道應如何解決。我試着更改他們的代碼以使用明確的字符集
new String(bytes, Charset.forName("UTF-8"))
但是,這會導致同樣的問題。值0x80-0x83似乎不存在有效的XML entities。
我發現你可以使用字符構造函數哪種工作,但翻譯下面,我不知道是否正確?
new String(new char[]{(char) value}, 0, 1);
輸出
128 => weird box character 0080 => [-62, -128]
129 => weird box character 0081 => [-62, -127]
130 => weird box character 0082 => [-62, -126]
131 => weird box character 0083 => [-62, -125]
它不一定是ASCII字符串,而是*文本*字符串,採用約定的編碼(在XML上下文中通常是UTF-8)。 –
然後,您可能需要重新說明有關「二進制消息」的部分。 –