我试图使用扩展的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
的表另一方面,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 感谢
答案 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。这是我得到的输出。
答案 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 :)