如何在 Scala 中 decode/encode ASCII_8BIT ?
How to decode/encode ASCII_8BIT in the Scala?
我有一个用 Ruby 编写的外部系统,它通过用 ASCII_8BIT
编码的线路发送数据。我应该如何在 Scala 中解码和编码它们?
我找不到用于在 Scala 中解码和编码 ASCII_8BIT
字符串的库。
据我了解,正确的是,ASCII_8BIT
类似于 Base64
。但是,有不止一种 Base64
编码。我应该使用哪种类型的编码来确保涵盖所有极端情况?
什么是 ASCII-8BIT?
ASCII-8BIT 是 Ruby 的二进制编码(在指定编码名称时,名称 "BINARY" 被接受为 "ASCII-8BIT" 的别名)。它既用于二进制数据,也用于您不知道其真实编码的文本。
任何字节序列都是 ASCII-8 位编码中的有效字符串,但与其他 8 位编码不同,只有 ASCII 范围内的字节被认为是可打印字符(当然只有那些可在 ASCII 中打印的字符) . 128-255 范围内的字节被认为是特殊字符,在其他编码中没有表示。因此,尝试将 ASCII-8BIT 字符串转换为任何其他编码将失败(或根据您为 encode
提供的选项将非 ASCII 字符替换为问号),除非它仅包含 ASCII 字符。
它在 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。
我有一个用 Ruby 编写的外部系统,它通过用 ASCII_8BIT
编码的线路发送数据。我应该如何在 Scala 中解码和编码它们?
我找不到用于在 Scala 中解码和编码 ASCII_8BIT
字符串的库。
据我了解,正确的是,ASCII_8BIT
类似于 Base64
。但是,有不止一种 Base64
编码。我应该使用哪种类型的编码来确保涵盖所有极端情况?
什么是 ASCII-8BIT?
ASCII-8BIT 是 Ruby 的二进制编码(在指定编码名称时,名称 "BINARY" 被接受为 "ASCII-8BIT" 的别名)。它既用于二进制数据,也用于您不知道其真实编码的文本。
任何字节序列都是 ASCII-8 位编码中的有效字符串,但与其他 8 位编码不同,只有 ASCII 范围内的字节被认为是可打印字符(当然只有那些可在 ASCII 中打印的字符) . 128-255 范围内的字节被认为是特殊字符,在其他编码中没有表示。因此,尝试将 ASCII-8BIT 字符串转换为任何其他编码将失败(或根据您为 encode
提供的选项将非 ASCII 字符替换为问号),除非它仅包含 ASCII 字符。
它在 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。