ASP.Net Core Identity预生成页面俄语字母显示为问号的解决方法
解决ASP.NET Core Identity预生成页面俄语字母显示为问号的问题
我之前也碰到过类似的坑,Identity预生成页面的非ASCII字符乱码确实容易让人头疼,给你几个实用的排查和解决方向:
1. 检查Identity页面文件的编码格式
这是最常见的诱因——预生成的.cshtml文件可能没以UTF-8编码保存,导致俄语字符无法正确解析:
- 打开显示异常的文件(比如你的
_LoginPartial.cshtml),看Visual Studio右下角的编码标识(比如显示“UTF-8”或“Windows-1251”)。 - 如果不是UTF-8 with BOM(带签名的UTF-8),点击编码选项,选择「Save with Encoding...」,然后选中「Unicode (UTF-8 with signature) - Codepage 65001」保存即可。
2. 配置全局编码与区域文化
确保ASP.NET Core应用全程使用UTF-8编码,并配置正确的俄语区域文化:
在Program.cs(.NET 5及以下版本为Startup.cs)中添加以下配置:
var builder = WebApplication.CreateBuilder(args); // 配置Razor页面与JSON的编码规则 builder.Services.AddRazorPages() .AddJsonOptions(options => { options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; }); // 设置请求本地化,指定俄语区域 builder.Services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { "ru-RU" }; options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("ru-RU"); options.SupportedCultures = supportedCultures.Select(c => new System.Globalization.CultureInfo(c)).ToList(); options.SupportedUICultures = options.SupportedCultures; }); var app = builder.Build(); // 启用请求本地化中间件(需放在UseRouting之后,UseAuthorization之前) app.UseRequestLocalization(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
3. 确认母版页的Meta标签与引用
- 确保你的
_Layout.cshtml中包含正确的UTF-8编码Meta标签:<meta charset="utf-8" /> - 检查Identity页面顶部是否引用了正确的母版页,比如:
避免Identity页面使用了默认的、未配置编码的母版页。@{ Layout = "_Layout"; }
4. 强制项目文件编码统一
打开项目的.csproj文件,添加以下配置,强制所有.cshtml文件使用UTF-8编码:
<PropertyGroup> <DefaultItemExcludes>$(DefaultItemExcludes);**/*.cshtml</DefaultItemExcludes> </PropertyGroup> <ItemGroup> <Content Include="**/*.cshtml"> <Encoding>UTF-8</Encoding> </Content> </ItemGroup>
按这个顺序排查,一般先解决文件编码问题就能搞定。如果还是不行,再检查全局编码配置和母版页引用。
内容的提问来源于stack exchange,提问作者DVice
相关产品推荐
相关产品推荐

