关于java:在字符串中追加扩展的ascii

Appending extended ascii in strings

我尝试使用扩展的ASCII字符179(看起来像管道)。

这是我使用它的方法。

1
2
3
4
5
String cmd ="";
        char pipe = (char) 179;
//      cmd ="02|CO|0|101|03|0F""
         cmd ="02"+pipe+"CO"+pipe+"0"+pipe+"101"+pipe+"03"+pipe+"0F";
        System.out.println("cmd"+cmd);

产量

1
cmd 023CO30310130330F

但是输出是这样的。我已经读到扩展的ASCII字符没有正确显示。

Is my code correct and just the ascii is not correctly displayed
or my code is wrong.

我不关心向用户显示这个字符串,我需要将它发送到服务器。

编辑供应商的API文档声明我们需要使用ASCII179(看起来像管道)。服务器端代码需要179(扩展ASCII的一部分)作为管道/垂直线,因此我不能使用124(管道)

编辑2

这是扩展ASCII的表

enter image description here

On the other hand this table shows that ascii 179 is"3" . Why
are there different interpretation of the same and which one should I
consider??

编辑3我的默认字符集值是(这与我的问题有关吗?)

1
2
System.out.println("Default Charset=" + Charset.defaultCharset());
Default Charset=windows-1252

谢谢!

我提到过

如何将字符转换为字符串?

如何用整数值打印Java中扩展的ASCII代码谢谢


您的代码是正确的;串接字符串值和char值可以达到预期的效果。179的价值观是错误的。你可以谷歌"unicode 179",你会发现"unicode字符‘上标三’(u+00b3)",正如人们所期望的。您可以简单地说"char pipe='';",而不是使用整数。或者更好:string pipe="",它还允许您灵活地使用多个字符:)

为了回应新的编辑…

我建议您在Java字符串级别上修复这个相当低级的问题,而不是在将字节发送到服务器之前替换这个字符的字节编码?

例如这样的东西(未经测试)

1
2
3
4
5
6
7
8
9
byte[] bytes = cmd.getBytes(); // all ascii, so this should be safe.
for (int i = 0; i < bytes.length; i++) {
   if (bytes[i] == '|') {
      bytes[i] = (byte)179;
   }
}

// send command bytes to server
// don't forget endline bytes/chars or whatever the protocol might require. good luck :)


使用以下代码。

1
2
3
4
5
String cmd ="";
char pipe = '\u2502';
cmd ="02"+pipe+"CO"+pipe+"0"+pipe+"101"+pipe+"03"+pipe+"0F";
System.out.println("cmd"+cmd);
System.out.println("int value:" + (int)pipe);

输出:

1
2
cmd 02│CO│0101│03│0F
int value: 9474

我正在使用Intellij。这是我得到的输出。

enter image description here