Maison > Article > développement back-end > Résoudre le problème des caractères tronqués dans le noyau asp.net lors de la sortie du chinois
Avant-propos
En tant que développeur Web .NET, le moment le plus triste pour moi est lorsque je suis confronté à la mauvaise solution sur Windows Server lors du développement et du déploiement du projet. C'est aussi l'artefact Nginx, mais Nginx sur Win l'est. toujours inférieur. Sous Linux, vous pouvez dire « Pourquoi ne pas utiliser le NLB fourni avec Windows ? » Alors c'est la mentalité de troupeau d'un petit oiseau comme moi. N'avez-vous pas vu que la dernière architecture de Stack Overflow 2016 utilise également le. même technologie de charge et de cache ? Adopter des solutions déjà matures sur Linux ? C'est une bonne chose de trouver une solution appropriée lorsqu'il n'y a pas d'autre moyen. Bien sûr, vous devez choisir la meilleure solution lorsqu'il existe un moyen.
Heureusement, .ASP.NET Core est apparu. Il s'inscrit dans la tendance open source, se débarrasse du Win Server qui a été critiqué et apparaît devant nous comme une version multiplateforme d'ASP. FILET. Indépendamment des comparaisons de performances ennuyeuses dans Benchmark, ou du fait que nous puissions rivaliser avec les applications Web JAVA et PHP à l'avenir, du moins pour nous, développeurs de plates-formes .NET, nous avons une direction de développement supplémentaire et une technologie de pointe et mature supplémentaire. opportunités. Pas grand chose à dire ci-dessous. Cet article présente principalement le problème des caractères tronqués lorsque le noyau asp.net produit du chinois. Jetons un coup d'œil ensemble.
Reproduction du problème
Créer une nouvelle console et un nouveau 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("您好,北京欢迎你"); }); } }
Et si nous obtenions l'encodage "GB2312" et que nous l'encodions ensuite ?
public static void Main(string[] args) { Console.WriteLine("您好,北京欢迎你"); try { Console.WriteLine(Encoding.GetEncoding("GB2312")); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } }
'GB2312' n'est pas un nom d'encodage pris en charge. Pour plus d'informations sur la définition d'un encodage personnalisé, consultez la documentation de Encoding.RegisterProvider. method.
Nom du paramètre : name
Ce qui précède signifie probablement que Encoding ne prend pas en charge le codage GB2312 et que vous devez utiliser la méthode Encoding.RegisterProvider pour enregistrer le fournisseur.
try { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.WriteLine(Encoding.GetEncoding("GB2312")); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read();
CodePagesEncodingProvider est dans le package 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" } } },
D'accord, Modifions le code, inscrivons-nous d'abord, puis produisons le chinois
try { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.WriteLine(Encoding.GetEncoding("GB2312")); Console.WriteLine("您好,北京欢迎你"); } catch (Exception ex) { Console.WriteLine(ex.Message); }
Résumé
Donc, lors de la sortie sur la page ou de la sortie du chinois sur la console, vous devriez payer attention Enregistrez le fournisseur. Ce qui précède représente l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra être utile aux études ou au travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer.
Pour plus d'articles sur la résolution du problème des caractères tronqués dans le noyau asp.net lors de la sortie du chinois, veuillez faire attention au site Web PHP chinois !