From 01f093e10e7779da59545877b951c2dd98144c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E5=90=8C?= Date: Tue, 5 Dec 2023 20:29:32 +0800 Subject: [PATCH] Base64fixed (#407) * fixed bug * add comments --------- Co-authored-by: Jimmy --- src/neoxp/Extensions/Extensions.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/neoxp/Extensions/Extensions.cs b/src/neoxp/Extensions/Extensions.cs index be0cbd69..89fb083f 100644 --- a/src/neoxp/Extensions/Extensions.cs +++ b/src/neoxp/Extensions/Extensions.cs @@ -20,8 +20,10 @@ using Neo.Wallets; using NeoExpress.Models; using System.Diagnostics.CodeAnalysis; +using System.Globalization; using System.Numerics; using System.Text; +using System.Text.RegularExpressions; namespace NeoExpress { @@ -108,6 +110,7 @@ public static bool IsValidHexString(this string text) public static bool TryGetBytesFromBase64String(this string text, out Span bytes) { bytes = null; + text = Base64Fixed(text); Span buffer = new byte[text.Length * 3 / 4]; if (Convert.TryFromBase64String(text, buffer, out var bytesWritten)) { @@ -117,7 +120,24 @@ public static bool TryGetBytesFromBase64String(this string text, out Span return false; } - + /// + /// Convert Unicode Characters to AscII Characters by Regular Expressions. + /// + /// Base64 string with Unicode escaping. e.g. DCECbzTesnBofh/Xng1SofChKkBC7jhVmLxCN1vk\u002B49xa2pBVuezJw== + /// Base64 strings without Unicode escaping. e.g. DCECbzTesnBofh/Xng1SofChKkBC7jhVmLxCN1vk+49xa2pBVuezJw== + public static string Base64Fixed(string str) + { + //Unicode e.g. \u002B + MatchCollection mc = Regex.Matches(str, @"\\u([\w]{2})([\w]{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase); + byte[] bts = new byte[2]; + foreach (Match m in mc) + { + bts[0] = (byte)int.Parse(m.Groups[2].Value, NumberStyles.HexNumber); + bts[1] = (byte)int.Parse(m.Groups[1].Value, NumberStyles.HexNumber); + str = str.Replace(m.ToString(), Encoding.Unicode.GetString(bts)); + } + return str; + } public static string EscapeString(this string text)