Ruby和低级字符编码

时间:2014-04-08 11:10:18

标签: ruby encoding character-encoding

我试图在你将二进制数据放入并指定编码的情况下制作一个小实用程序,并将其解码为一个字符串。但实际上,将其解码为字符串是不够的。我希望将结果标记为显示哪些字节解码为哪些字符

enter image description here

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

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

对于有状态编码,它有点难度。您经常会得到一些代码字节,表示要切换状态,直到另有说明为止。这些字节不对应于一个字符,我希望它们在输出中的表示方式不同。我似乎找不到这样做的图书馆。

我开始采用的方法是在Ruby中从头开始实现有状态编码。这样,我得到了我想要的结果,但它做了很多工作。

但是在状态变化标记之间,状态编码基本上是由多个无状态编码构建的(严格来说,它不总是之间的,有时状态变化只覆盖下一个字符你但是,这些编码通常不与Ruby捆绑在一起。例如,JIS X 0208-1983并未与Ruby捆绑作为编码,即使它是ISO-2022-JP的一部分, 与Ruby捆绑在一起。

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

但是...

等待......从头开始实现字符集解码......并使用解释语言?这根本不是一个好主意。

所以我问:是否有一些现有方法可以提取这种"解释性"一组相对完整的字符集的信息?理想情况下,我希望我收集的字符集非常完整,但也许如果我可以跳过一些努力来覆盖人们实际拥有的大部分内容以供给这个东西,我可以休息一下,然后担心其余的。 / p>

0 个答案:

没有答案