当前位置: 首页 > 知识库问答 >
问题:

Java系统。出来println只打印VT字符后面的内容

陶飞鸿
2023-03-14

我正在从兔子队列接收数据,我正试图将其转换为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和之后的内容,而不打印之前的内容。其他没有正确转换和打印亚洲字符或其他随机字符。


共有1个答案

郦良才
2023-03-14

这些是控制字符

  • SOH是头的开始,ASCII代码1
  • VT是垂直选项卡,ASCII代码11,转义"\v"
  • ETX是文本的结尾,ASCII代码3,转义"\0x3"

另见:

什么是垂直标签

这些控制字符不仅对打印具有特殊意义(语义),而且仅对文本传输具有特殊意义。

当从RabbitMQ文本消息队列接收数据时,可能需要将特殊的消息转换组件放置到位。

 类似资料:
  • 我需要为一个设计糟糕的旧应用程序编写JUnit测试,该应用程序正在向标准输出写入大量错误消息。当方法正确运行时,它将返回一个XML响应: 但当它得到格式错误的XML或不理解请求时,它会返回,并将一些内容写入标准输出。 在JUnit中是否有任何方法断言控制台输出?要捕获以下情况:

  • 我如何才能使打印在控制台中的消息不是直接发出,而是一点一点地发出

  • 我试试密码 <代码>系统。出来println(16 并且输出为2! 但是这是如何工作的?语法是什么?

  • 我有一个在Wildfly 8.*上运行的Spring Web应用程序,由于某种原因,它不会打印到控制台。我看到所有控制台日志和堆栈跟踪都很好,但系统消息只是没有出现。 问题可能出在我的log4j设置上,所以我会发布该配置; 我以前在JBoss 7.1上运行过应用程序,但是没有这个问题,所以我真的不知道可能出了什么问题。 随意询问我的任何其他配置不确定需要什么。 编辑: 这是我的独立部署文件夹中的日

  • 我试图理解使用vs.。 似乎用于显示静态信息,而是从方法返回的值。然而,我看到了像下面这样的例子,其中函数在语句中使用 何时使用和