在字符串中附加扩展的ascii

时间:2016-01-12 09:11:49

标签: java string ascii

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

以下是我如何使用它。

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);

输出

cmd 02³CO³0³101³03³0F

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

  

我的代码是否正确,只是ascii没有正确显示    或者我的代码错了。

我并不担心向用户显示此字符串我需要将其发送到服务器。

修改 供应商的api文档声明我们需要使用ascii 179(看起来像管道)。服务器端代码需要179(扩展ascii的一部分)作为管道/垂直线,所以我不能使用124(管道)

编辑2

Here是扩展ascii

的表

enter image description here

  

另一方面,this表显示ascii 179是" 3" 。为什么   有不同的解释,我应该是谁   考虑??

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

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

谢谢!

我已提到

How to convert a char to a String?

How to print the extended ASCII code in java from integer value 感谢

2 个答案:

答案 0 :(得分:1)

使用以下代码。

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);

输出:

cmd 02│CO│0│101│03│0F
int value: 9474

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

enter image description here

答案 1 :(得分:1)

你的代码是正确的;串联String值和char值可以达到预期效果。它的值179是错误的。你可以google" unicode 179",你就会发现" Unicode字符' SUPERSCRIPT THREE' (U + 00B3)",正如人们所预料的那样。并且,您可以简单地说" char pipe =' |';"而不是使用整数。甚至更好:String pipe =" |&#34 ;;这也允许您灵活地使用多个字符:)

回应新编辑......

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

E.g。像这样(未经测试)

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 :)