C#编程 Base-64字符串中的无效字符
publicstaticstringBase64Decode(stringstr){try{byte[]by=Convert.FromBase64String(str.T...
public static string Base64Decode(string str)
{
try
{
byte[] by = Convert.FromBase64String(str.Trim());
str = Encoding.UTF8.GetString(by);
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
return str;
}解码老出问题,求解 展开
{
try
{
byte[] by = Convert.FromBase64String(str.Trim());
str = Encoding.UTF8.GetString(by);
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
return str;
}解码老出问题,求解 展开
3个回答
推荐于2016-03-26 · 知道合伙人软件行家
Axure夜话
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数:1197
获赞数:1344
1992年毕业于太原理工大学,20年IT公司工作经验现任山西誉海和科技有限公司技术总监,老二牛车教育课程总监
向TA提问 私信TA
关注
展开全部
Base-64字符串中的无效字符 指的是base64字符串转化的格式是不正确的。
c#通常使用两个方法来处理base64字符串
1:Convert.ToBase64String
2:Convert.FromBase64String
参考案例:将图像转化为base64字符串,再将base64字符串转换为图像
private void button4_Click(object sender, EventArgs e)
{
//处理图像
string fileNmae = string.Empty;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
fileNmae = openFileDialog1.FileName;
}
else
{
fileNmae = @"d:\对联1.jpg";
}
Bitmap bmp = new Bitmap(fileNmae);
BinaryFormatter bin = new BinaryFormatter();
MemoryStream mem = new MemoryStream();
try
{
bin.Serialize(mem, bmp);
String strString = Convert.ToBase64String(mem.GetBuffer(), 0, Convert.ToInt32(mem.Length));
this.textBox1.Text = strString;
Application.DoEvents();
}
catch (Exception ex)
{
throw (ex);
}
finally
{
mem.Close();
}
}
private void button5_Click(object sender, EventArgs e)
{
byte[] bits = Convert.FromBase64String(this.textBox1.Text);
MemoryStream mem = new MemoryStream(bits);
BinaryFormatter bin = new BinaryFormatter();
try
{
object obj = ((object)(bin.Deserialize(mem)));
this.pictureBox1.Image = (Bitmap)obj;
}
catch (Exception ex)
{
throw (ex);
}
finally
{
mem.Close();
}
}
c#通常使用两个方法来处理base64字符串
1:Convert.ToBase64String
2:Convert.FromBase64String
参考案例:将图像转化为base64字符串,再将base64字符串转换为图像
private void button4_Click(object sender, EventArgs e)
{
//处理图像
string fileNmae = string.Empty;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
fileNmae = openFileDialog1.FileName;
}
else
{
fileNmae = @"d:\对联1.jpg";
}
Bitmap bmp = new Bitmap(fileNmae);
BinaryFormatter bin = new BinaryFormatter();
MemoryStream mem = new MemoryStream();
try
{
bin.Serialize(mem, bmp);
String strString = Convert.ToBase64String(mem.GetBuffer(), 0, Convert.ToInt32(mem.Length));
this.textBox1.Text = strString;
Application.DoEvents();
}
catch (Exception ex)
{
throw (ex);
}
finally
{
mem.Close();
}
}
private void button5_Click(object sender, EventArgs e)
{
byte[] bits = Convert.FromBase64String(this.textBox1.Text);
MemoryStream mem = new MemoryStream(bits);
BinaryFormatter bin = new BinaryFormatter();
try
{
object obj = ((object)(bin.Deserialize(mem)));
this.pictureBox1.Image = (Bitmap)obj;
}
catch (Exception ex)
{
throw (ex);
}
finally
{
mem.Close();
}
}
展开全部
首先,你参数是string str,函数里你又“str=”,这里编译应当不会通过的。
其次,你用UTF8解码这取决于你输入的Base64编码是基于哪个字符集的,如果字符集不匹配,显示结果是不正确的。
一般而言,你函数应当还有一个参数,来自动设置字符集。
如,public static string Base64Decode(string str, string char_set) //char_set为字符集的WebName
下面的转换语句就是:Encoding.GetEncoding(source_charset).GetString(by);
或者直接写成Encoding.GetEncoding(0).GetString(by);这样用系统默认字符集,当然这取决于你的操作系统。
其次,你用UTF8解码这取决于你输入的Base64编码是基于哪个字符集的,如果字符集不匹配,显示结果是不正确的。
一般而言,你函数应当还有一个参数,来自动设置字符集。
如,public static string Base64Decode(string str, string char_set) //char_set为字符集的WebName
下面的转换语句就是:Encoding.GetEncoding(source_charset).GetString(by);
或者直接写成Encoding.GetEncoding(0).GetString(by);这样用系统默认字符集,当然这取决于你的操作系统。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
str 的格式不正确,不是base64的字符串,如果仅仅只是想将字符串转换成byte[] 可以用 System.Text.Encoding.UTF8.GetBytes(str)
追问
我就想把解码完的str返回
str = Encoding.UTF8.GetString(Convert.FromBase64String(str));
改成这样也不行
System.Text我在程序开头已经声明了,还是不好使
高手帮我看一下吧
追答
提示: Base-64字符串中的无效字符,说明你的 str 并不是 Base-64字符串,你报错是报在Convert.FromBase64String这一句,不是Base-64字符串是不能换转的,就明明是一个石头,你硬是想把它变成猪肉,怎么行呢
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询