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

Résoudre le problème des caractères tronqués dans le noyau asp.net lors de la sortie du chinois

高洛峰
高洛峰original
2017-02-07 11:57:281993parcourir

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("您好,北京欢迎你");
});
}
}

解决asp.net core在输出中文时乱码的问题

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();
}
}

解决asp.net core在输出中文时乱码的问题

'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 !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn