如何在Java中创建自己独特的字符集?

pbpqsu0x  于 2022-12-28  发布在  Java
关注(0)|答案(2)|浏览(208)

我想用Java制作自己的 Charset,然后将其用于编码目的。我需要添加一些特殊的符号到我的 Charset 以及所有的数字和4种语言(繁体中文,美国英语,波兰语和俄语)。
我试着浏览Charset类,但没有找到解决方案。

3wabscal

3wabscal1#

Basil的回答解释了您不需要定义一个定制的Charset来支持一些非标准符号。
但是如果你真的需要这样做,你必须写一个扩展Charset的自定义类。你必须实现3个抽象方法:

  • boolean contains(Charset cs)-判断此字符集是否包含给定的字符集。
  • CharsetDecoder newDecoder()为此字符集构造新的解码器。
  • CharsetEncoder newEncoder()为此字符集构造新的编码器。

Charset API中的其他方法很可能不需要重写。
解码器和编码器需要能够在包含字符集编码文本的ByteBufferCharBuffer中的Unicode码点之间进行转换。虽然CharsetDecoderCharsetEncoder也是抽象类,但它们要求您(分别)实现具有复杂要求的decodeLoopencodeLoop方法。
我不知道有任何关于如何实现定制Charset及其CharsetDecoderCharsetEncoder类的特定文档或教程,但是您应该能够在OpenJDK Java SE代码库中找到示例代码(它们将是内部类...)
我试着浏览字符集类,但没有真正找到一个解决方案。
那么,“解决方案”就是你需要研究现有的例子......或者得出结论,你根本不需要解决这个问题。

jckbn6z7

jckbn6z72#

Unicode中的## * 专用区域 *
你还没有真正解释你要达到的目标是什么,但很可能也没有必要发明:

*字符集(一组数字,每个数字分配给一个特定字符)
*字符编码(一种将这些数字的示例表示为位和字节的方法)。

Unicode定义了超过144,000个字符,每个字符都被分配了一个从0到一百万多一点的数字。这就留下了大量未分配的数字。其中一些空的子范围是为将来使用而保留的。但是,您可能会感兴趣的是,其中一些子范围是为“私人使用”而保留的,Unicode联盟永远不会将其分配给字符。请参见Wikipedia
👉 你可以自由地给那些“私人使用区域”内的任何数字赋予任何你想要的含义。所以这就是你的字符集。
👉 至于字符编码,使用UTF-8几乎总是最好的,这有几个原因,如here所述。
Java支持所有的Unicode。所以不需要额外的编程来支持你的字符。无论遇到来自私有使用区域内部还是外部的字符,一切都是一样的。
如果你想让其他人参与你的奋进,或者想分享文档,那么你应该知道有一个非官方的字符注册表分配给 * 私人使用 * 号码。这个非官方的注册表是一个志愿者的努力,在Unicode Consortium之外创建。此注册表用于Unicode中永远不会接受的字符。这包括虚构语言,如 Klingon from * 星星Trek*。在为角色选择码位数字时,您可能希望避免使用这些非正式注册的码位。

相关问题