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

Razor页面赋值特殊字符编码错乱,MySQL存储显示为�

排查方向与解决办法

既然你已经排除了数据库本身和EF配置的问题,而且PHP插入正常,那问题确实大概率出在Razor页面到.NET代码的字符传递环节,下面是几个针对性的排查和解决方向:

1. 检查Razor文件的保存编码

硬编码在.razor文件里的特殊字符(比如"Garçon")如果文件本身不是以UTF-8编码保存,编译时就会变成乱码。

  • 在Visual Studio中:右键你的Create.razor文件 → 属性 → 高级保存选项,确认编码选择的是UTF-8(带不带BOM都可以,但必须是UTF-8,不能是ANSI或其他编码)。
  • 其他编辑器(比如VS Code):确保右下角显示的编码是UTF-8,若不是,点击编码选择"通过UTF-8重新打开"并保存。

2. 验证硬编码字符串的实际值

在你的AddEntry方法里添加调试代码,确认变量赋值后的字符串是否真的正确:

void AddEntry()
{
    UserModel waitress = new UserModel();
    waitress.Username = "Garçon";
    // 调试输出:查看字符串的字节序列和实际值
    var bytes = System.Text.Encoding.UTF8.GetBytes(waitress.Username);
    Console.WriteLine($"Username: {waitress.Username}, Bytes: {BitConverter.ToString(bytes)}");
    // 其余代码略
}

正常情况下,ç的UTF-8字节是C3-A7,õ是C3-B5。如果输出的字节不对,说明字符串在赋值时就已经乱码了,根源就是文件编码问题。

3. 强制项目编译时使用UTF-8

有些情况下,系统默认编码会影响.NET项目对源文件的读取,你可以在项目文件(.csproj)中添加以下配置,强制编译器用UTF-8处理所有源文件:

<PropertyGroup>
  <LangVersion>latest</LangVersion>
  <CodePage>65001</CodePage>
</PropertyGroup>

添加后重新编译项目,再测试插入特殊字符。

4. 使用Unicode转义序列替代硬编码(测试用)

如果怀疑硬编码的字符有问题,可以暂时用Unicode转义序列赋值,比如:

waitress.Username = "Gar\u00E7on"; // \u00E7 对应字符 ç

如果这样插入数据库后显示正常,就可以确定是源文件编码导致的硬编码字符串乱码。

5. 检查EF Core发送的SQL参数值

开启EF Core的日志功能,查看实际发送到MySQL的SQL参数是否正确:
在DatabaseContext的OnConfiguring方法中添加日志配置:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseMySQL(Configuration.GetSection("AppSettings").GetSection("Database").GetSection("ConnectionString")["MySQL"])
        .LogTo(Console.WriteLine, Microsoft.Extensions.Logging.LogLevel.Information);
}

运行程序后,查看控制台输出的SQL语句,确认Username参数的值是否是正确的特殊字符。如果参数值已经乱码,问题在EF之前的环节;如果参数值正确,那可能需要再次确认MySQL连接器的版本(建议使用最新稳定版的Pomelo连接器)。


内容的提问来源于stack exchange,提问作者Michel Arendt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:12:47