2011-09-07 68 views
2

我使用的传统二进制消息格式需要ASCII-6(6位ascii)编码的字符序列。我找不到ASCII-6的定义,但它们定义了以A = 0x01,B = 0x02等开头的字符映射。在Java中获取ASCII-6编码

我想知道是否存在Java中的现有字符集-6。如果不是,你可以以某种方式创建或定义自己的人物?如果不是有更好的解决方案,比创建一个字符映射到ascii-6编码值更好吗?

+1

如果每个字符需要6位,它们是如何打包成8位字节的?你每3个字节得到4个字符吗?编写你自己的转换器可能比开发一个CharSet更简单。 –

+0

不,他们确实希望每个字符都打包成6位,而不是8位。我将使用像http://introcs.cs.princeton.edu/java/stdlib/BinaryOut.java.html这样的东西来处理在非字节边界上写东西。但我必须先将每个字符转换为ascii-6编码,然后写出6个最不重要的位,并且我认为在这里使用预定义或我自己的字符集将会最快。 – kenen

+0

所有的数据流基本上是每个字节8位。没有其他选择。您可以使它看起来像是6位或16位,但您必须知道您打算如何将其映射到8位数据流。我建议你在决定它是否最简单之前阅读CharSet的文档。 ;) –

回答

2

您可以通过编写一个扩展CharsetProvider的类并将其提供给您的应用程序来定义自己的字符编码。例如,JCharset对一些较少使用的编码做了这个。就像我可以看到的那样,即使他们不支持旧的ASCII变体,但您可以通过研究实现来了解它是如何完成的。这并不难,只是有点乏味。

+0

你能下载JCharset吗?对于我来说,下载链接返回到http://www.freeutils.net/source/jcharset/,这是我开始的地方 – kenen

+0

是的,但您需要先接受许可条款(可能还需要Javascript启用)。 –

+0

哦,我的公司代理阻止了javascript文件。谢谢,我会看看。 – kenen

3

我不知道是否存在任何6位编码,其中A是0x01,B是0x02等,但大多数六位编码中的字符可以通过整数算术与ASCII-7字符互换。例如,SIXBIT DEC encoding中的字符可以通过添加32(基数10)更改为ASCII-7字符,反之亦然,因为SIXBIT编码方案仅携带ASCII-7字符集中的可打印字符。

这种涉及Byte S和Character旨意要求你写一个Charset和使用CharsetProvider注册它的转型实现支持。棘手的部分是将6位序列映射到Unicode字符,因为Byte是字符集EncodersDecoders对其进行操作的最基本单位。另一方面,如果您使用的是6位编码字符,每个字符需要8位宽字符,那么所述算术运算变得容易,否则您将需要跟踪编码器/解码器是否处于无效状态。