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

ASP.NET Core中波/阿语与英语混合字符串显示乱码如何解决?

问题描述

我正在开发一个ASP.NET Core应用程序,从SQL数据库读取记录后,希望通过jQuery函数在HTML页面中展示。以下是我的部分代码:

//some code...

<script charset="utf-8" type="text/javascript">
   $(document).ready(function () {
     var materialname = [];
     
     @if (Model.Count() != 0)
     {
        foreach (var item in Model)
        {
          @:console.log('name: ' + '@item.material.StoreName');
          @:materialname.push('@item.material.StoreName');

        } 
     }
   });
</script>

运行代码后,控制台显示的字符串不正确。例如,数据库中的StoreName为波斯/阿拉伯语与英语混合的正常字符,但控制台中显示为:

name: &#x645;&#x62D;&#x635;&#x648;&#x644; &#x62F;&#x633;&#x62A;&#x647; AB &#x627;&#x646;&#x62F;&#x627;&#x632;&#x647; 5mm

请问如何修正以显示正确的编码字符?

解决方案

问题根源是ASP.NET Core的Razor引擎默认会对输出文本做HTML编码,非ASCII字符被转成了HTML实体。可以通过以下两种方式修复:

方法一:用@Html.Raw()跳过编码

在输出StoreName时,用@Html.Raw()包裹,明确告诉Razor不要对该内容进行HTML编码:

<script charset="utf-8" type="text/javascript">
   $(document).ready(function () {
     var materialname = [];
     
     @if (Model.Count() != 0)
     {
        foreach (var item in Model)
        {
          @:console.log('name: ' + '@Html.Raw(item.material.StoreName)');
          @:materialname.push('@Html.Raw(item.material.StoreName)');
        } 
     }
   });
</script>

方法二:将模型序列化为JSON(更推荐)

这种方式避免了Razor与JS代码的混杂,同时自动处理编码问题,代码也更简洁:

  1. 先通过NuGet安装Newtonsoft.Json包(如果未安装)
  2. 将整个模型序列化为JSON字符串后直接赋值给JS变量:
<script charset="utf-8" type="text/javascript">
   $(document).ready(function () {
     // 序列化模型为JSON,自动处理字符编码
     var materials = @Html.Raw(JsonConvert.SerializeObject(Model));
     var materialname = materials.map(item => item.material.StoreName);
     
     // 打印测试
     materialname.forEach(name => console.log('name: ' + name));
   });
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:13:35