1

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

当前支持三种传输模式:netascii(这是“美国信息交换标准代码”[1] 中定义的 ascii,并在“Telnet 协议规范”[3] 中指定了修改。)请注意,它是 8 位 ascii。本文档中将使用术语“netascii”来表示此特定版本的 ascii。);

这在 Java 术语中是什么意思?在这种模式下如何读取/写入文件或转换字符串?

4

2 回答 2

2

netascii似乎被定义为 ASCII 的 8 位扩展,但仅限于从 0x20 到 0x7F 的基本 ASCII,外加 8 个控制字符(见第 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为您处理此问题,但如果您想推出自己的实现,只需使用US-ASCIIJava 中的编码,然后执行额外检查以确保您没有来自 0x00– 的任何不允许的控制字符0x20 范围,最后确保您的换行符是 CRLF 而不仅仅是 LF。

于 2012-06-07T17:33:37.787 回答
1

问:这在 Java 术语中是什么意思?

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

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

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

于 2012-06-07T17:17:35.560 回答