You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Base64图片解码异常排查:FormatException报错与正确解码方法

解决Base64图片解码抛出FormatException的问题

嗨,我看了你遇到的问题——用C#解码Base64图片时抛出了FormatException,咱们一步步来排查和解决。

首先看你提供的Base64字符串,它是标准的data URI格式(data:image/jpg;base64,...),但你的正则表达式有点小问题,可能导致没有正确提取到纯净的Base64数据,或者在某些场景下匹配失败:

你的正则是:

Regex.Match(base64string, @"data:image/(?<type>.+?),(?<data>.+)")

这个正则会把jpg;base64整个当成type分组的内容,虽然data分组能拿到后面的Base64数据,但如果传入的字符串格式稍有变化,就可能匹配失败,导致base64Data为空或无效,进而触发FormatException。

修复步骤:

  1. 修正正则表达式
    改成专门匹配带;base64的图片data URI,确保准确提取图片类型和Base64数据:

    var match = Regex.Match(base64string, @"data:image/(?<type>[^;]+);base64,(?<data>.+)");
    

    这里[^;]+表示匹配到第一个;为止,这样type分组只会拿到jpg,而data分组能准确获取到后面的纯净Base64数据。

  2. 添加匹配验证
    在使用分组前,先检查正则是否匹配成功,避免因为匹配失败导致空字符串传入Convert.FromBase64String:

    string base64string = subSocket.ReceiveFrameString();
    if (base64string.Length > 1000) {
        var match = Regex.Match(base64string, @"data:image/(?<type>[^;]+);base64,(?<data>.+)");
        // 先检查是否匹配成功
        if (match.Success) {
            var base64Data = match.Groups["data"].Value;
            try {
                byte[] imgBytes = Convert.FromBase64String(base64Data);
                myTexture.LoadRawTextureData(imgBytes);
                myTexture.Apply();
                rawImg.texture = myTexture;
            } catch (FormatException ex) {
                // 这里可以添加调试日志,看看出问题的base64Data是什么
                Debug.LogError($"Base64解码失败:{ex.Message},数据片段:{base64Data.Substring(0, 100)}...");
            }
        } else {
            Debug.LogError("传入的字符串不是标准的base64图片data URI");
        }
    }
    
  3. 额外的Base64校验(可选)
    如果还是有问题,可以提前校验Base64数据的有效性:

    • 确保长度是4的倍数,不足的话补=(不过标准的Base64应该已经处理好了,但有些场景可能会截断)
    • 确保只包含Base64允许的字符:A-Z, a-z, 0-9, +, /, =

测试你的示例Base64字符串

我用你提供的Base64字符串测试了修正后的代码,能正常解码成JPG图片,所以问题大概率出在正则匹配的准确性和缺少匹配成功的判断上。

另外,还要注意myTexture的初始化是否正确——比如创建Texture2D时,最好根据图片的实际格式设置对应的纹理格式(比如JPG用TextureFormat.RGB24),不过这不会导致FormatException,只会影响图片显示效果。

内容的提问来源于stack exchange,提问作者Mr. Randy Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:42:31