这是ASCII吗?
如何在理解语言中打印它?比如在char?
我从PortCom得到了这个答案。 我的阅读方式如下:
boolean ok = false;
int read = 0;
System.out.println("In Read :");
while(ok == false) {
int availableBytes = 0;
try {
availableBytes = inputStream.available();
if (availableBytes > 0) {
read = read + availableBytes;
int raw = inputStream.read(readBuffer, read-availableBytes, availableBytes);
System.out.println("Inpustream ="+raw);
traduction = new String(readBuffer, read-availableBytes, availableBytes);
System.out.println("2=>" + traduction);
Response = new String(readBuffer, "UTF-8"); // bytes -> String
} catch (IOException e) {
}
if (availableBytes == 0 && (read == 19 || read == 8)){
ok = true;
}
}
答案 0 :(得分:2)
在我阅读您的评论时,我的印象是您对字符和ASCII的含义感到有些困惑。
字符是数字。简单的愚蠢数字。事实上,人们在数字和字母之间创建了标准映射。例如,根据ASCII字符 map ,97是a
。这样做的含义是,当显示软件看到97时,它知道它必须找到给定字体中的字符a
的字形,并将其绘制到屏幕上。
当使用ASCII字符映射解释时,整数值0到31是所谓的控制字符,因此没有与之关联的可视字形。它们告诉软件如何表现而不是显示什么。例如,字符#0是NUL
字符,用于表示带有C字符串库的字符串的结尾,在大多数其他语言中几乎没有实际用途。在我的脑海中,角色#13是NL
,对于"新线",它告诉渲染软件将绘图光标移动到下一行,而不是渲染角色。
大多数ASCII控制字符已过时,并不打算发送到文本渲染软件。因此,如果实施人员不知道该怎么做,他们会决定如何处理这些问题。他们中的许多人什么都不做,有些打印问号,有些打印完全不相关的字符。
ASCII仅将0到128之间的整数映射到字形或控制字符,这会在未定义的字节中留下另外128个可能的整数。高于127的整数在ASCII标准中没有关联的字形,只有这些字符可以被称为"而不是ASCII"。那么,你应该问的是,"是文本?"而不是"是 ASCII ?",因为0到127之间的任何整数序列都必须是ASCII,但是它不管是否是人类 - 可读的。
这个问题的明显答案是"不,它不是文字"。如果它不是文本,那么问我们是什么样的心理学,因为那里没有通用的错误" maims文本。它几乎可以是任何东西。
但是,由于您声明您正在阅读串行链接,我建议您检查一下波特率和其他链接设置,因为没有内置的机制可以检测从最终到另一端的不匹配,它可以像在这里一样破坏数据。
答案 1 :(得分:0)
使用原始值代替availableBytes:
traduction = new String(readBuffer, read-availableBytes, raw);
原始表示实际读取的数量与您请求的数量相对应。如果您询问10个字节并且它读取5,则剩余的5个将是未知的垃圾。
<强>更新强>
由于同样的原因,答案显然也是错误的:
Response = new String(readBuffer, "UTF-8");
即使你只读了1个字节,你也要告诉它转换整个缓冲区。如果您有点不走运,您将获得异常,因为并非所有字节组合都可以使用UTF-8进行转换