【问题标题】:How to decode/encode ASCII_8BIT in the Scala?如何在 Scala 中解码/编码 ASCII_8BIT?
【发布时间】:2019-10-04 09:10:15
【问题描述】:

我有一个用 Ruby 编写的外部系统,它通过使用ASCII_8BIT 编码的线路发送数据。我应该如何在 Scala 中对它们进行解码和编码?

我在 scala 中找不到用于解码和编码 ASCII_8BIT 字符串的库。

据我了解,ASCII_8BITBase64 类似。但是,Base64 编码不止一种。我应该使用哪种类型的编码来确保覆盖所有极端情况?

【问题讨论】:

  • 你试过什么?代码?错误?
  • 我尝试通过akka.parboiled2.util.Base64.rfc2045 解码,它可以工作。但是,我不知道它何时停止工作,因为它不一样。也许它是一样的,但我不知道在哪里检查。

标签: ruby scala base64 ascii-8bit


【解决方案1】:

什么是 ASCII-8BIT?

ASCII-8BIT 是 Ruby 的二进制编码(在指定编码名称时,名称“BINARY”被接受为“ASCII-8BIT”的别名)。它既可用于二进制数据,也可用于您不知道实际编码的文本。

任何字节序列都是 ASCII-8BIT 编码中的有效字符串,但与其他 8 位编码不同的是,只有 ASCII 范围内的字节被认为是可打印字符(当然也只有那些可在 ASCII 中打印的字符)。 128-255 范围内的字节被认为是在其他编码中没有表示的特殊字符。因此,除非它只包含 ASCII 字符,否则尝试将 ASCII-8BIT 字符串转换为任何其他编码都会失败(或用问号替换非 ASCII 字符,具体取决于您提供给encode 的选项)。

它在 Scala/JVM 世界中的等价物是什么?

没有严格的等价物。如果您正在处理二进制数据,您应该使用没有编码且不被视为包含文本的二进制流。

如果您正在处理文本,您要么需要知道(或以某种方式弄清楚)它的编码,要么只是随意选择一个 8 位 ASCII 超集编码。这样,非 ASCII 字符可能会作为错误字符出现(如果文本实际上是用不同的编码编码的),但您不会收到任何错误,因为任何字节都是有效字符。然后,您可以根据需要将非 ASCII 字符替换为问号。

这和 Base64 有什么关系?

什么都没有。 Base64 是一种将二进制数据表示为 ASCII 文本的方法。它本身不是字符编码。知道字符串的字符编码为 ASCII 或 ASCII-8BIT 或任何其他编码,并不能告诉您它是否包含 Base64 数据。

但请注意,Base64 字符串将完全由 ASCII 字符组成(不仅是任何 ASCII 字符,还包括字母、数字、+/=)。因此,如果您的字符串包含任何非 ASCII 字符或除上述之外的任何字符,则它不是 Base64。

因此,任何 Base64 字符串都可以表示为 ASCII。因此,如果您在 Ruby 中有一个包含 Base64 数据的 ASCII-8BIT 字符串,您应该能够毫无问题地将其转换为 ASCII。如果不能,那就不是 Base64。

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 2019-09-10
    • 1970-01-01
    • 2011-02-11
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多