Ruby与低级字符编码

Ruby与低级字符编码,ruby,encoding,character-encoding,Ruby,Encoding,Character Encoding,我正在尝试制作一个小实用程序,在其中输入二进制数据并指定编码,然后它将其解码为字符串。但实际上,将其解码为字符串是不够的。我希望对结果进行标记,以便准确地显示哪些字节被解码为哪些字符 我正在使用Ruby(也许我不应该)。看起来将二进制编码的字符串转换为Unicode并返回非常容易,但是获得比这更深入的信息似乎很困难,如果不是不可能的话 实际上,对于无状态编码,可以使用内置的实用程序执行任务。您将逐渐输入更长的二进制块,直到一个字符弹出。然后你说这个角色来自于你输入的任何块,然后重复这个过程。最

我正在尝试制作一个小实用程序,在其中输入二进制数据并指定编码,然后它将其解码为字符串。但实际上,将其解码为字符串是不够的。我希望对结果进行标记,以便准确地显示哪些字节被解码为哪些字符

我正在使用Ruby(也许我不应该)。看起来将二进制编码的字符串转换为Unicode并返回非常容易,但是获得比这更深入的信息似乎很困难,如果不是不可能的话

实际上,对于无状态编码,可以使用内置的实用程序执行任务。您将逐渐输入更长的二进制块,直到一个字符弹出。然后你说这个角色来自于你输入的任何块,然后重复这个过程。最后,您将看到字符串的末尾,其中包含一个代码点列表和为创建每个代码点而读取的字节。这不是一个有效的解决方案,但它可以在不编写太多代码的情况下工作

对于有状态编码,它有点难。通常会得到一些字节的代码来指示切换状态,除非另有说明。这些字节与字符不对应,我希望它们在输出中以不同的方式表示。我似乎找不到这样的图书馆

我开始采用的方法是在Ruby中从头开始实现有状态编码。通过这种方式,我得到了我想要的结果,但这需要大量的工作

但是在状态更改标记之间,有状态编码基本上是由多个无状态编码构成的(严格来说,它并不总是介于两者之间,有时状态更改只覆盖您读取的下一个字符)。然而,这些编码通常不与Ruby捆绑在一起。例如,JIS X 0208-1983没有作为编码与Ruby捆绑在一起,尽管它是与Ruby捆绑在一起的ISO-2022-JP的一部分

我发现ICU项目为此收集了大量数据文件(尽管有一个很大的免责声明,不信任任何数据)。我为其中一种格式编写了一个解析器,并在内存中建立了表,并设法为JIS X 0208-1983实现了一个解码器。现在我有了它,我可以尝试编写ISO-2022-JP,并试着让它们一起工作

但是

等等。。。从头开始实现字符集解码。。。用解释语言呢?这听起来根本不是个好主意

所以我问:是否有一些现有的方法可以为一组相对完整的字符集提取这种“解释性”信息?理想情况下,我希望我收集的字符集能够非常完整,但如果我可以略过一些努力来涵盖人们手头上可以输入的大部分内容,我可以休息一下,以后再担心其他的