在JAVA中处理“netascii”

时间:2012-06-07 17:04:33

标签: java encoding io

我正在java中实现TFTP(RFC 1350)客户端和服务器。

  

目前支持三种转移模式:netascii(这是      “美国信息交换标准代码”中定义的ascii      [1]具有“Telnet协议”中指定的修改      规范“[3]。)注意它是8位ascii。术语      “netascii”将在本文档中用于表示这一点      特定版本的ascii。);

这在Java术语中意味着什么?以及如何在这种模式下读/写文件或转换字符串?

2 个答案:

答案 0 :(得分:2)

netascii似乎被定义为ASCII的8位扩展,但仅限于基本ASCII,范围从0x20到0x7F,plus 8 control characters(参见第9页):0x00(NUL),0x10( LF),0x13(CR),0x07(BEL),0x08(BS),0x09(HT),0x11(VT)和0x12(FF)。

除了确保您的输出仅在此范围内是纯ASCII之外,netascii的另一个要求是换行始终是CRLF,因此您必须相应地进行转换。任何CR只能由LF或NUL跟随。

您可以使用Apache Commons为您处理此问题,但如果您想推出自己的实现,只需在Java中使用US-ASCII编码,然后执行额外检查以确保您不要t具有0x00-0x20范围内的任何非允许控制字符,并最终确保您的换行符是CRLF而不仅仅是LF。

答案 1 :(得分:1)

  

问:这在Java术语中意味着什么?

答:我认为这只是意味着您在读取或写入这些8位ASCII值时需要指定字符集:

  • byte[] bytes = string.getBytes("UTF-8");

  • String string = new String(bytes, "UTF-8");