encoding - base64编码: input character

标签 encoding character-encoding base64

我正在尝试了解 base64 编码的输入要求。我非常尊敬的 Nicholas Zakas 在这里发表了一篇文章,他引用了一个规范,即如果输入包含任何代码高于 255 Zakas Article on base64 的字符,则应该抛出错误。

Before even attempting to base64 encode a string, you should check to see if the string contains only ASCII characters. Since base64 encoding requires eight bits per input character, any character with a code higher than 255 cannot be accurately represented. The specification indicates that an error should be thrown in this case:

if (/([^\u0000-\u00ff])/.test(text)){
        throw new Error("Can't base64 encode non-ASCII characters.");
    }

他在文章的另一个单独部分提供了指向 RFC 3548 的链接但我没有看到任何输入要求,除了:

Implementations MUST reject the encoding if it contains characters outside the base alphabet when interpreting base encoded data, unless the specification referring to this document explicitly states otherwise.

不确定“基本字母表”是什么意思,但也许这就是 Zakas 所指的。但是通过说他们必须拒绝编码,这似乎暗示这是已经被编码的东西而不是输入(当然,如果输入无效,它也会出现在编码中,所以也许这一点没有实际意义)。

对标准是什么感到有点困惑。

最佳答案

从根本上说,谈论“字符串的 base64 编码”是错误的,其中“字符串”是指文本

Base64 编码应用于二进制 数据(字节序列,或者八位字节,如果你想更挑剔的话),结果是文本。输出中的每个字符都是可打印的 ASCII 文本。 base64 的全部意义在于提供一种将任意二进制数据转换为文本格式的安全方法,该格式可以可靠地嵌入其他文本、传输等。ASCII 与几乎所有字符集兼容,因此您不太可能无法将 ASCII 文本编码为其他内容的一部分。

当有人谈论“base64 编码字符串”时,他们实际上是在谈论使用某些现有编码(例如 UTF-8)将文本编码为二进制,然后对结果应用 base64 编码。 解码时,您需要将 base64 解码回二进制,然后使用原始编码解码该二进制数据,以获得原始文本。

关于encoding - base64编码: input character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506071/

相关文章:

html - 带有背景图像 : url () 的 CSS 中的内联图像

javascript - 字母替换

php - 如何使用 PHP 和 Android 从 Web 服务发送和检索数据

php - 无法从 Excel(utf8 格式)中获取正确的字符到 PHP

javascript - ActionScript2 Base64 编码/解码二进制数据

.net - 使用 .NET 通过 HTTP 发送 Base64 编码字符串时出现问题

MySQL/MySQLDump/phpMyAdmin 忽略字符集

encoding - UTF-8 现在是非 ASCII 字符二维码的首选编码吗?

zend-framework - 使用 Bisna 时,如何在 Zend Framework application.ini 的 Doctrine 2 中定义 utf-8 的使用

c# - 在 C# 中将 ϼ 和 Ã 等特殊字符转换回其原始的拉丁字母对应字符