Vorwort
Als .NET-Webentwickler ist es für mich am traurigsten, wenn ich während der Projektentwicklung und -bereitstellung mit der schlechten Lösung auf Windows Server konfrontiert werde. Es ist auch das Artefakt Nginx, aber Nginx unter Win Immer minderwertig. Unter Linux könnte man sagen: „Warum nicht das mit Windows gelieferte NLB verwenden? gleiche Lade- und Cache-Technologie? Lösungen übernehmen, die unter Linux bereits ausgereift sind? Es ist gut, eine geeignete Lösung zu finden, wenn es keinen anderen Weg gibt. Natürlich sollte man die beste Lösung wählen, wenn es einen Weg gibt.
Glücklicherweise ist .ASP.NET Core erschienen. Es entspricht dem Open-Source-Trend, beseitigt den kritisierten Win-Server und erscheint vor uns als plattformübergreifende Version von ASP. NETTO. Unabhängig von den langweiligen Leistungsvergleichen im Benchmark oder davon, ob wir in Zukunft mit JAVA- und PHP-Webanwendungen konkurrieren können, haben wir zumindest für uns Entwickler von .NET-Plattformen eine weitere Entwicklungsrichtung und ein weiteres innovatives und ausgereiftes Unterfangen Gelegenheiten. Im Folgenden wird nicht viel gesagt. In diesem Artikel wird hauptsächlich auf das Problem verstümmelter Zeichen eingegangen, wenn der asp.net-Kern Chinesisch ausgibt.
Reproduktion des Problems
Erstellen Sie eine neue Konsole und Site
public class Program { public static void Main(string[] args) { Console.WriteLine("您好,北京欢迎你"); Console.Read(); } }
Site
public class Startup { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { await context.Response.WriteAsync("您好,北京欢迎你"); }); } }
Was wäre, wenn wir die Kodierung „GB2312“ erhalten und diese dann kodieren?
public static void Main(string[] args) { Console.WriteLine("您好,北京欢迎你"); try { Console.WriteLine(Encoding.GetEncoding("GB2312")); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } }
'GB2312' ist kein unterstützter Codierungsname. Informationen zum Definieren einer benutzerdefinierten Codierung finden Sie in der Dokumentation für den Encoding.RegisterProvider Methode.
Parametername: Name
Das Obige bedeutet wahrscheinlich, dass Encoding die GB2312-Codierung nicht unterstützt und Sie die Methode Encoding.RegisterProvider verwenden müssen, um den Anbieter zu registrieren.
try { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.WriteLine(Encoding.GetEncoding("GB2312")); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read();
CodePagesEncodingProvider ist im Paket System.Text.Encoding.CodePages
"System.Text.Encoding.CodePages/4.0.1": { "type": "package", "dependencies": { "Microsoft.NETCore.Platforms": "1.0.1", "System.Collections": "4.0.11", "System.Globalization": "4.0.11", "System.IO": "4.1.0", "System.Reflection": "4.1.0", "System.Resources.ResourceManager": "4.0.1", "System.Runtime": "4.1.0", "System.Runtime.Extensions": "4.1.0", "System.Runtime.Handles": "4.0.1", "System.Runtime.InteropServices": "4.1.0", "System.Text.Encoding": "4.0.11", "System.Threading": "4.0.11" }, "compile": { "ref/netstandard1.3/System.Text.Encoding.CodePages.dll": {} }, "runtimeTargets": { "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { "assetType": "runtime", "rid": "unix" }, "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { "assetType": "runtime", "rid": "win" } } },
Okay, Lassen Sie uns den Code ändern, uns zuerst registrieren und dann Chinesisch ausgeben
try { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.WriteLine(Encoding.GetEncoding("GB2312")); Console.WriteLine("您好,北京欢迎你"); } catch (Exception ex) { Console.WriteLine(ex.Message); }
Zusammenfassung
Wenn Sie also Chinesisch auf der Seite oder auf der Konsole ausgeben, sollten Sie bezahlen Achtung Registrieren Sie den Anbieter. Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit von Nutzen sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.
Weitere verwandte Artikel zur Lösung des Problems verstümmelter Zeichen im asp.net-Kern bei der Ausgabe von Chinesisch finden Sie auf der chinesischen PHP-Website!