我正在编写一个 C# 应用程序来解码此字符串:
"--W 3原文3 R hcn Rfd Gl tZ SI 6 I jAi L CJ w cm 9 k dW N 0 X 2 lk I jo iO D Q wM DMz MD气LC J 1 cm wi O iI if Sx 7 InN 0 Y XJ 0 X 3 Rp b WU iO iI 3 OS In by b 2 R 1 Y 3 Rfa WQ iO iI 4 NDA zN jk 2 MS In Vy bCI 6 ii J 9 LH原文3 R hcn Rfd Gl tZ SI 6 Ij gyI iw icH J v ZH Vj dF 9 p Z CI 6 jg 0 M DAz M DI wii wi dX Js I jo i In 0 sey J zd GF yd F 90 aW 1 lI jo iMT A 5 ii wi cH J v ZH Vj dF 9 p Z CI 6 ii is In Vy bCI 6 Imh 0 dH Bz Oi 8 vY m xv Zy 5 sY XJ laW 5 lZH V zaG 9
当我将其复制/粘贴到此在线工具中时,它可以工作:https://www.base64decode.org
但当我使用Convert.FromBase64String(str)
时,它会引发异常:
系统。格式异常:输入不是有效的Base-64字符串,因为它包含一个非基本64字符、两个以上的填充字符或填充字符中的非法字符。
为什么?
您必须像上面提到的那样从字符串中删除 --
前缀。我想补充一点,当我使用 Convert.FromBase64String(str)
时,我的 base64 字符串中有 data:image/jpeg;base64,前缀时
,我遇到了同样的错误。
正在删除< code >数据:image/JPEG;base64,从字符串工作。
您的代码不是有效的Base64字符串。字符串开头的-字符无效。你可以这样转换。
using System;
using System.Text;
var decodedString = "--W3sic3RhcnRfdGltZSI6IjAiLCJwcm9kdWN0X2lkIjoiODQwMDMzMDQiLCJ1cmwiOiIifSx7InN0YXJ0X3RpbWUiOiI3OSIsInByb2R1Y3RfaWQiOiI4NDAzNjk2MSIsInVybCI6IiJ9LHsic3RhcnRfdGltZSI6IjgyIiwicHJvZHVjdF9pZCI6Ijg0MDAzMDIwIiwidXJsIjoiIn0seyJzdGFydF90aW1lIjoiMTA5IiwicHJvZHVjdF9pZCI6IiIsInVybCI6Imh0dHBzOi8vYmxvZy5sYXJlaW5lZHVzaG9wcGluZy5jYS8yMDE3LzAxL3RyYW5zZm9ybWVyLXNlcy12aWV1eC1nYW50cy1kZS1jdWlyLWVuLTUtbWludXRlcy8ifV0="
.Replace("-", "");
var bytes = Convert.FromBase64String(decodedString);
var encodedString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(encodedString);
URL 解码将从 base64 字符串中删除,使其无效。如果解码“a ==”,结果将是字符“k”。如果使用 URL 解码来解码“a ==”,则 URL 解码会将字符串转换为“a ==”,并且尝试解码时会出现异常。
简而言之,。Net Framework使用Base64编码的变体,它不允许无效字符,而相关站点使用的PHP正在使用另一个变体,它允许无效字符但丢弃它们。
Base64编码将三个八位字节转换为四个编码字符。Base64编码中64个字符中的前62个的有效字符:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
有几个变体允许字符62和63使用不同的字符。与最常见的变体一样,使用C#时,完整的字符集为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
https://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110).aspx
从零开始按升序排列的base-64数字是大写字符“A”到“Z”,小写字符“A”到“Z”,数字“0”到“9”,以及符号“”和“/”。无值字符“=”用于尾随填充。
这种变体是RFC 3548或RFC 4648的标准“base64”编码,除非另有说明,否则禁止无效值。
PHP对MIME使用Base64传输编码(RFC 2045),它允许无效字符,但会丢弃它们。
在所有其他Base64变体中,禁止使用无效字符。
如果最初的Base64实际上应该包含< code>-字符,那么它使用的是不同的变体。
见:https://en.wikipedia.org/wiki/Base64#Variants_summary_table
因此,下面的代码适用于一个活动,但当我使用onCreateView将其添加到一个片段中时,应用程序就会崩溃 Fragment公共类步骤扩展Fragment{ 12-13 15:17:15.062 984-984/com.stephenh.daytrack.daytrack.daytrackstephenh E/AndroidRuntime:致命异常:主进程:com.stephenh.daytrac
问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt
所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。
列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。
我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P
我一直在使用声纳3.2 同样的配置,当我升级到SonarQube 4.4时 声纳项目属性: 请帮助整理这些例外 问候, KP