2011-09-07 67 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位寬字符,那麼所述算術運算變得容易,否則您將需要跟蹤編碼器/解碼器是否處於無效狀態。