我正在从兔子队列接收数据,我正试图将其转换为String
。消息始终以SOH字符开头,并始终以VT字符结尾,后跟ETX字符。数据接收正确,打印到控制台的字节数组正确。问题是,在转换为字符串之后,
系统中的所有字符都会丢失。出来省略VT和ETX之前的println
。我首先想到的是byte[]
到String
的转换可能是我做错了,但我认为可能是打印到控制台时出现了我丢失的问题。
以下是我尝试过的所有转换方法:
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() + " - ");
};
消息1、2、6、7的System.out.println只打印VT、ETX和之后的内容,而不打印之前的内容。其他没有正确转换和打印亚洲字符或其他随机字符。
这些是控制字符
SOH
是头的开始,ASCII代码1VT
是垂直选项卡,ASCII代码11,转义"\v"
ETX
是文本的结尾,ASCII代码3,转义"\0x3"
另见:
什么是垂直标签?
这些控制字符不仅对打印具有特殊意义(语义),而且仅对文本传输具有特殊意义。
当从RabbitMQ文本消息队列接收数据时,可能需要将特殊的消息转换组件放置到位。
我需要为一个设计糟糕的旧应用程序编写JUnit测试,该应用程序正在向标准输出写入大量错误消息。当方法正确运行时,它将返回一个XML响应: 但当它得到格式错误的XML或不理解请求时,它会返回,并将一些内容写入标准输出。 在JUnit中是否有任何方法断言控制台输出?要捕获以下情况:
我如何才能使打印在控制台中的消息不是直接发出,而是一点一点地发出
我试试密码 <代码>系统。出来println(16 并且输出为2! 但是这是如何工作的?语法是什么?
我有一个在Wildfly 8.*上运行的Spring Web应用程序,由于某种原因,它不会打印到控制台。我看到所有控制台日志和堆栈跟踪都很好,但系统消息只是没有出现。 问题可能出在我的log4j设置上,所以我会发布该配置; 我以前在JBoss 7.1上运行过应用程序,但是没有这个问题,所以我真的不知道可能出了什么问题。 随意询问我的任何其他配置不确定需要什么。 编辑: 这是我的独立部署文件夹中的日
我试图理解使用vs.。 似乎用于显示静态信息,而是从方法返回的值。然而,我看到了像下面这样的例子,其中函数在语句中使用 何时使用和