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

Blazor Server无法正确显示特殊字符问题求助

解决Blazor C#中特殊Unicode字符显示乱码问题

问题根源

你遇到的乱码(如ðŽðð‹ðˆðð„)本质是UTF-8编码的Unicode字符被错误解码导致的。PHP环境默认的字符编码设置能正确识别数据库中的UTF-8字节流,但Blazor/C#读取时用了错误的编码规则,把多字节的UTF-8字符拆成了单字节的乱码字符。

具体解决方案

  • 修正数据库连接的编码配置
    确保数据库连接字符串强制使用UTF-8编码:

    • 若使用MySQL/MariaDB,连接字符串添加Character Set=utf8mb4(支持完整Unicode字符集):
      Server=your-server;Database=your-db;Uid=user;Pwd=pass;Character Set=utf8mb4;
      
    • 若使用SQL Server,确保数据库表的排序规则为Latin1_General_100_CI_AS_SC_UTF8,且连接字符串包含Unicode=True:
      Server=your-server;Database=your-db;User Id=user;Password=pass;Unicode=True;
      
  • 反向编码还原正确字符
    如果你暂时无法修改数据库连接配置,可以通过编码转换还原正确内容。当前乱码是UTF-8字节被当作单字节编码(如Windows-1252)解码的结果,执行以下转换:

    // 将乱码字符串转回原UTF-8字节,再用UTF-8解码
    byte[] rawBytes = Encoding.GetEncoding(1252).GetBytes(post.title);
    string correctTitle = Encoding.UTF8.GetString(rawBytes);
    

    注意:如果你的系统默认编码不是Windows-1252,可替换为Encoding.Default测试,但优先用1252(常见的单字节编码错误场景)。

  • 验证实体类属性类型
    确保存储标题的实体类属性为string类型,避免用byte[]手动处理字符;如果使用EF Core,检查是否有自定义的字符转换逻辑,确保没有破坏UTF-8编码。

  • 前端字体支持
    即使字符还原正确,若前端字体不包含数学粗体字符(如𝐎对应Unicode码点U+1D40E),仍可能显示异常。在Blazor组件的CSS中设置支持扩展Unicode的字体:

    .blog-title {
      font-family: 'Segoe UI', Roboto, 'Noto Sans', sans-serif;
    }
    

内容的提问来源于stack exchange,提问作者Mpilonhle Ngcoya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:22