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

.NET 6 MVC多语言Web应用中JS脚本内资源字符串无法正常显示Unicode字符

.NET 6 MVC多语言Web应用中JS脚本内资源字符串无法正常显示Unicode字符

Hey,我碰到过几乎一模一样的问题!从.NET Framework 4.8迁移到.NET 6后,C#代码里的多语言资源显示正常,但JS里的资源全变成了\u开头的Unicode转义序列,德语变音符号、波斯语这些都没法正常显示。折腾了一阵后,终于找到几个靠谱的解决办法,分享给你:

核心原因

.NET 6默认的JSON序列化和Razor视图输出策略,会把非ASCII的Unicode字符转义成\uXXXX格式,而.NET Framework 4.8在处理这类场景时更宽松,直接输出原始字符。这就是为什么之前正常,迁移后出问题的关键。

解决方案1:在Razor视图中正确注入资源到JS

如果你是通过Razor视图把资源直接赋值给JS变量,别直接用@Resources.MyString,因为默认Razor会做HTML编码,放到JS里就会变成转义字符。正确的做法是结合Html.Raw和JSON序列化,既避免编码问题,又能处理JS特殊字符(比如引号、换行):

<script>
    // 用Json.Serialize处理JS特殊字符,Html.Raw避免转义Unicode
    var myLocalizedText = @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Resources.MyString));
    console.log(myLocalizedText); // 现在应该能正常显示Unicode字符了
</script>

解决方案2:全局配置JSON序列化行为

如果你的项目里有很多地方需要在JS中使用资源(比如通过AJAX获取资源接口),可以全局配置JSON序列化选项,让它直接输出Unicode字符而不是转义序列。在Program.cs中修改服务配置:

builder.Services.AddControllersWithViews()
    .AddJsonOptions(options =>
    {
        // 配置编码器,允许直接输出Unicode字符
        options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
    });

配置后,不管是通过Json()方法返回资源,还是在视图中用Json.Serialize,都会直接输出原始Unicode字符,不用再单独处理。

解决方案3:检查AJAX接口的响应编码

如果是通过AJAX请求后端接口获取资源,还要确保响应头里的Content-Type包含charset=utf-8。不过.NET 6默认已经配置了这个,但保险起见,可以在控制器方法里显式指定:

public IActionResult GetLocalizedResources()
{
    var resourceData = new 
    {
        WelcomeText = Resources.Welcome,
        ErrorMessage = Resources.Error
    };
    
    // 显式指定UTF-8编码
    return Json(resourceData, new JsonSerializerOptions
    {
        Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
    });
}

额外检查点

  • 确认你的资源文件(.resx)的“自定义工具”是ResXFileCodeGenerator,访问修饰符是public(这些应该和4.8时一致,不过还是确认下);
  • 确保视图文件的编码是UTF-8(右键视图文件→属性→高级→编码选择UTF-8)。

试试上面的方法,应该能解决你的问题!

备注:内容来源于stack exchange,提问作者Hita Barasm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:03:14