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: محصول دسته AB اندازه 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代码的混杂,同时自动处理编码问题,代码也更简洁:
- 先通过NuGet安装
Newtonsoft.Json包(如果未安装) - 将整个模型序列化为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
相关产品推荐
相关产品推荐

