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;
- 若使用MySQL/MariaDB,连接字符串添加
反向编码还原正确字符
如果你暂时无法修改数据库连接配置,可以通过编码转换还原正确内容。当前乱码是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
相关产品推荐
相关产品推荐

