简单的是或否问题,我90%肯定它不是......但我不确定。
Base64字符串可以包含标签吗?
答案 0 :(得分:15)
这取决于你的要求。如果您询问制表符是否可以进行base-64编码,则答案为“是”,因为它们可以与任何其他ASCII字符一样对待。
但是,如果您询问base-64输出是否可以包含选项卡,则答案为否。以下链接用于详细介绍base-64的文章,包括哪些字符被视为有效:
答案 1 :(得分:9)
简短的回答是否定的 - 但Base64也不能包含回车符。
这就是为什么,如果你有多行Base64,你可以去掉任何回车,换行符以及任何不在Base64字母表中的东西
包括标签。
答案 2 :(得分:3)
当前版本的PEM(指定 在RFC 1421中)使用64个字符 字母组成的上部和 小写罗马字母字符 (A-Z,a-z),数字(0-9)和 “+”和“/”符号。 “=” 符号也用作特殊符号 后缀代码。原本的 规范,RFC 989,另外 使用“*”符号来分隔编码 但输出中的未加密数据 流。
如您所见,标签字符不包括在内。但是,您当然可以将制表符编码为base64字符串。
答案 3 :(得分:2)
不确定。 Tab只是ASCII字符9,它具有base64表示,就像任何其他整数一样。
答案 4 :(得分:1)
Base64规范(RFC 4648)在Section 3.3中指出,除非另一规范明确允许,否则应拒绝任何遇到的非字母字符:
实现必须拒绝 编码数据,如果它包含
基本字母表外的字符 在解释基数编码时 数据,除非规范 明确提到这份文件 另有说明。这样的规格 可以改为陈述,就像MIME那样, 基地外的人物 编码字母应该只是 在解释数据时忽略(“be 你所接受的自由主义者“)。 请注意,这意味着任何 相邻的回车/换行 (CRLF)字符构成 “非字母字符”并且是 忽略。
PEM(RFC 1421)和MIME(RFC 2045)等规范指定可以通过空格分解Base64字符串。每个引用的RFC 822,选项卡(HTAB)被视为空白字符。
因此,当Base64用于MIME或PEM(以及可能的其他类似规范)的上下文时,在解码编码内容时应处理(剥离)空白(包括制表符)。
答案 5 :(得分:1)
哈哈,正如你从回答中看到的那样,这实际上并非如此简单,是的,没有答案。
转换后产生的Base64字符串不能包含制表符,但在我看来,你不是在问我,你在问我能否代表一个包含Base64中的标签的字符串(转换前),以及答案是肯定的。
我想补充一点,你应该做的就是确保你注意保留字符串的编码,即用正确的编码将其转换为字节数组(Unicode,UTF-8无论如何)然后转换那个字节数组到base64。
编辑:一个简单的测试。
private void button2_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
string test = "The rain in spain falls \t mainly on the plain";
sb.AppendLine(test);
UTF8Encoding enc = new UTF8Encoding();
byte[] b = enc.GetBytes(test);
string cvtd = Convert.ToBase64String(b);
sb.AppendLine(cvtd);
byte[] c = Convert.FromBase64String(cvtd);
string backAgain = enc.GetString(c);
sb.AppendLine(backAgain);
MessageBox.Show(sb.ToString());
}
答案 6 :(得分:0)
Convert.FromBase64String()
似乎并不介意它们。我相信字符串中的所有空格都会被忽略。
string xxx = "ABCD\tDEFG"; //simulated Base64 encoded string w/added tab
Console.WriteLine(xxx);
byte[] xx = Convert.FromBase64String(xxx); // convert string back to binary
Console.WriteLine(BitConverter.ToString(xx));
输出:
ABCD DEFG
00-10-83-0C-41-46
RFC-2045(6:8)的相关条款
编码的输出流必须是 不再代表 每个超过76个字符。 全线 休息或其他字符不是 必须忽略表1中的发现 解码软件。在base64数据中, 除表中的字符以外的字符 1,换行,和其他白色 空间可能表示传输 错误,关于哪个警告 消息甚至消息拒绝 可能适合某些人 情况。
答案 7 :(得分:0)
YES!
Base64用于使用一组安全字符将ANY 8bit值(十进制0到255)编码为字符串。 TAB是十进制9。
Base 64使用以下字符集之一:
Data: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URLs: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
文本中的二进制附件(例如:电子邮件)也使用此系统进行编码。
答案 8 :(得分:0)
这里似乎有很多混乱;而且令人惊讶的是,大多数答案都是“不”的。我认为这不是一个好的规范答案。 混淆的原因可能是Base64没有严格规定;存在多种实际实现和解释。 您可以查看link text以获取更多相关信息。
但是,一般情况下,符合base64的编解码器应该理解换行符,因为它们是由一些base64定义(76个字符段,然后换行等)强制执行的。 因此,大多数解码器也允许缩进空格,并且通常在4个字符的“三元组”之间有任何空格(因为它们编码3个字节,因此命名)。
因此,实际上你可以使用制表符和其他空格。
但是如果生成发送给服务的base64内容,我自己就不会自己添加标签 - 对你发送的内容保守一点,(更多)自由接收你的内容。