我使用的傳統二進制消息格式需要ASCII-6(6位ascii)編碼的字符序列。我找不到ASCII-6的定義,但它們定義了以A = 0x01,B = 0x02等開頭的字符映射。在Java中獲取ASCII-6編碼
我想知道是否存在Java中的現有字符集-6。如果不是,你可以以某種方式創建或定義自己的人物?如果不是有更好的解決方案,比創建一個字符映射到ascii-6編碼值更好嗎?
我使用的傳統二進制消息格式需要ASCII-6(6位ascii)編碼的字符序列。我找不到ASCII-6的定義,但它們定義了以A = 0x01,B = 0x02等開頭的字符映射。在Java中獲取ASCII-6編碼
我想知道是否存在Java中的現有字符集-6。如果不是,你可以以某種方式創建或定義自己的人物?如果不是有更好的解決方案,比創建一個字符映射到ascii-6編碼值更好嗎?
您可以通過編寫一個擴展CharsetProvider
的類並將其提供給您的應用程序來定義自己的字符編碼。例如,JCharset對一些較少使用的編碼做了這個。就像我可以看到的那樣,即使他們不支持舊的ASCII變體,但您可以通過研究實現來了解它是如何完成的。這並不難,只是有點乏味。
我不知道是否存在任何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
是字符集Encoders
和Decoders
對其進行操作的最基本單位。另一方面,如果您使用的是6位編碼字符,每個字符需要8位寬字符,那麼所述算術運算變得容易,否則您將需要跟蹤編碼器/解碼器是否處於無效狀態。
如果每個字符需要6位,它們是如何打包成8位字節的?你每3個字節得到4個字符嗎?編寫你自己的轉換器可能比開發一個CharSet更簡單。 –
不,他們確實希望每個字符都打包成6位,而不是8位。我將使用像http://introcs.cs.princeton.edu/java/stdlib/BinaryOut.java.html這樣的東西來處理在非字節邊界上寫東西。但我必須先將每個字符轉換爲ascii-6編碼,然後寫出6個最不重要的位,並且我認爲在這裏使用預定義或我自己的字符集將會最快。 – kenen
所有的數據流基本上是每個字節8位。沒有其他選擇。您可以使它看起來像是6位或16位,但您必須知道您打算如何將其映射到8位數據流。我建議你在決定它是否最簡單之前閱讀CharSet的文檔。 ;) –