我正在從一個兔子佇列接收資料,我試圖將其轉換為String. 訊息總是以 SOH 字符開始,總是以 VT 字符結束,后跟 ETX 字符。資料接收正確,列印到控制臺的位元組陣列正確。問題是,轉換為 后String,System.out.printlnVT 和 ETX 之前的所有字符都被省略了。我首先認為byte[]toString轉換可能是我做錯了,但我認為列印到我缺少的控制臺可能存在問題。
這是我嘗試過的所有轉換方法:
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
System.out.println("received message");
String message1 = new String(delivery.getBody(), StandardCharsets.US_ASCII);
String message2 = new String(delivery.getBody(), StandardCharsets.UTF_8);
String message3 = new String(delivery.getBody(), StandardCharsets.UTF_16);
String message4 = new String(delivery.getBody(), StandardCharsets.UTF_16BE);
String message5 = new String(delivery.getBody(), StandardCharsets.UTF_16LE);
String message6 = new String(delivery.getBody(), StandardCharsets.ISO_8859_1);
String message7 = new String(delivery.getBody());
String message8 = Base64.getEncoder().encodeToString(delivery.getBody());
String message9 = new String(Base64.getEncoder().encode(delivery.getBody()), StandardCharsets.UTF_8);
System.out.println(Arrays.toString(delivery.getBody()) " - " delivery.getBody().length);
System.out.println("1 " message1 " - " message1.length() " - ");
System.out.println("2 " message2 " - " message2.length() " - ");
System.out.println("3 " message3 " - " message3.length() " - ");
System.out.println("4 " message4 " - " message4.length() " - ");
System.out.println("5 " message5 " - " message5.length() " - ");
System.out.println("6 " message6 " - " message6.length() " - ");
System.out.println("7 " message7 " - " message7.length() " - ");
System.out.println("8 " message8 " - " message8.length() " - ");
System.out.println("9 " message9 " - " message9.length() " - ");
};
在System.out.println對訊息的1,2,6,7只列印VT,ETX,什么是后,但沒有什么是什么了。其他人未正確轉換并列印亞洲字符或其他隨機字符。
uj5u.com熱心網友回復:
特殊字符
這些是控制字符
SOH是頭的開始,ASCII 碼 1VT是垂直制表符,ASCII 碼 11,轉義"\v"ETX是文本結束,ASCII 碼 3,轉義"\0x3"
也可以看看:
什么是垂直標簽?
訊息傳輸的C0和C1控制碼
這些控制字符不僅對列印具有特殊意義(語意),而且僅對文本傳輸具有特殊意義。
當從 RabbitMQ 文本訊息佇列接收資料時,您可能需要放置一個特殊的訊息轉換組件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394233.html
標籤:爪哇
下一篇:問題:nginx:[emerg]mkdir()"/var/cache/nginx/client_temp"failed(13:Permissiondenied)
