java中的十六进制到ascii转换包含一些特殊字符

java中的十六进制到ascii转换包含一些特殊字符,java,jsp,Java,Jsp,我有一个十六进制字符串,我正在将其转换为ascii,但结果显示了带有一些特殊字符的输出 实际字符串=adsfads 输出字符串=adsfads��� 字符串hex=“61647366616473000000”; StringBuilder输出=新的StringBuilder(); 对于(int i=0;i

我有一个十六进制字符串,我正在将其转换为ascii,但结果显示了带有一些特殊字符的输出

实际字符串=adsfads 输出字符串=adsfads���

字符串hex=“61647366616473000000”; StringBuilder输出=新的StringBuilder(); 对于(int i=0;i0x00不是可打印的ascii字符

发件人: “ASCII表中的前32个字符是不可打印的控制代码,用于控制打印机等外围设备。”


顺便说一句,您的代码似乎很好。

您的代码很好。没有特殊字符显示

只需再次检查您的代码

请关注此帖子

公共类Test8{
公共静态void main(字符串[]args)
{
字符串hex=“61647366616473000000”;
StringBuilder输出=新的StringBuilder();
对于(int i=0;i
您的ASCII包含一些不可打印的字符,这就是导致问题的原因。如果您查看字符串的十六进制值“adsfads”等于61647366616473,而您使用的是“61647366616473000000”,最后一个是“000000”不可打印字符。如果要从字符串中删除这些零,则可以通过代码获得所需的结果。或者,也可以从字符串中替换不可打印字符以获得适当的结果。或者,您可以编写代码以检查ascii字符是否不可打印,然后为其指定一些值,如下所示:

public static boolean isAsciiPrintable(char ch) {
      if(ch >= 32 && ch < 127)
      {
        return true;
      }
      else
     //return false and do the stuff in calling method.
  }
public静态布尔值isAsciiPrintable(char-ch){
如果(ch>=32&&ch<127)
{
返回true;
}
其他的
//返回false并在调用方法中执行操作。
}
您还可以修改现有代码以获得所需的输出,如下所示

String hex = "61647366616473000000";
        StringBuilder output = new StringBuilder();
        for (int i = 0; i < hex.length(); i += 2) {
            String str = hex.substring(i, i + 2);
            int decimal = Integer.parseInt(str, 16);
            output.append((char) decimal);
        }
        System.out.println("YourText" + output.toString().replaceAll("\\p{C}", ""));
字符串hex=“61647366616473000000”; StringBuilder输出=新的StringBuilder(); 对于(int i=0;i
可能有一些不可见的空白字符(如0x0200B),它们是\p{Zs}组的一部分,该组也包含空白。如果您试图筛选不应包含任何空格的输入字符串,字符串replaceAll([\p{C}\p{Z}],“”)将起作用。

十六进制字符串的000000部分给出了奇怪的字符。
public static boolean isAsciiPrintable(char ch) {
      if(ch >= 32 && ch < 127)
      {
        return true;
      }
      else
     //return false and do the stuff in calling method.
  }
String hex = "61647366616473000000";
        StringBuilder output = new StringBuilder();
        for (int i = 0; i < hex.length(); i += 2) {
            String str = hex.substring(i, i + 2);
            int decimal = Integer.parseInt(str, 16);
            output.append((char) decimal);
        }
        System.out.println("YourText" + output.toString().replaceAll("\\p{C}", ""));