我使用的是传统的二进制消息格式,它需要ASCII-6 (6位ascii)编码的字符序列。我找不到ASCII6的定义,但他们在规范中定义了以A=0x01、B=0x02等开头的字符映射。
我想知道java中是否存在用于ASCII-6的字符集。如果没有,你能以某种方式创建或定义自己的字符集吗?如果没有,还有比创建字符到ascii-6编码值的映射更好的解决方案吗?
发布于 2011-09-08 00:13:33
我不确定是否存在6位编码,其中A是0x01
,B是0x02
等等,但大多数6位编码中的字符可以通过整数运算与ASCII7字符互换。例如,可以通过添加32 (以10为基数)将SIXBIT DEC encoding中的字符更改为ASCII-7字符,反之亦然,因为SIXBIT编码方案仅包含ASCII-7字符集中的可打印字符。
要实现对这种涉及Byte
和Character
的转换的支持,您需要编写一个Charset
并使用CharsetProvider
注册它。棘手的部分是将6位序列映射到Unicode字符,因为Byte
是字符集Encoders
和Decoders
操作的最基本的单元。另一方面,如果您正在对6位编码字符进行操作,每个字符都需要8位宽的字符,那么上述算术操作就变得很容易,否则您将需要跟踪编码器/解码器是否处于无效状态。
发布于 2011-09-07 23:43:47
您可以通过编写扩展CharsetProvider
的类并使其可用于您的应用程序来定义您自己的字符编码。例如,JCharset对一些较少使用的编码执行此操作。据我所知,即使它们不支持旧的ASCII变体,但您可以通过研究该实现来了解它是如何实现的。这并不是特别难,只是有点乏味。
https://stackoverflow.com/questions/7336509
复制相似问题