Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 22544|Svar: 0

[Kilde] c# Anmodning modtager forvrængede tegn for parametre

[Kopier link]
Opslået på 25/12/2015 18.41.49 | | | |


I morges blev jeg stillet et spørgsmål af en kollega: Jeg sagde, at de modtagne parametre var forvanskede, lad mig hjælpe med at løse det.


Platformen, som min kollega er ansvarlig for, er bygget Ext.js framework, og web.config-konfigurationsfilen er konfigureret med den globale "GB2312"-kodning:

<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileCoding="gb2312" culture="zh-CN"/>

Når frontenden indsender den "kinesiske tekst", modtager backenden forvrængede tegn med Request.QueryString["xxx"].

Uanset hvordan du dekoder med System.Web.HttpUtility.UrlDecode("xxx", "encoding type"), virker det ikke.

Hovedbeskrivelse:
1: Det første, der skal afgøres, er, at når klientens URL-parametre indsendes, vil Ext.js kode dem, før de indsendes, og klientens kodning er som standard UTF-8-kodning


2: Hvorfor er det så forvrænget, når man modtager parametre med Request.QueryString["xxx"]?

Vi vender kompileringen trin for trin,
2.1: Se på koden for QueryString-egenskaben:


2.2: Skærer ind i FillInQueryStringCollection()-metoden


2.3: Klip: QueryStringEncoding

Fra QueryStringEncoding-koden vælger systemet som standard globaliseringskonfigurationsnodens kodningsmetode, og hvis ikke, er standarden UTF-8-kodning
2.4: Klip i FillFromString (streng s, bool urlencoded, kodning koder)

Herfra finder vi, at alle parameterinput kaldes én gang: HttpUtility.UrlDecode(str2, kodning);

Når klient js indsender kinesisk til serveren i utf-8-kodning, vil den først dekode den én gang med gb2312 konfigureret ved globalisering, når den modtager den med Request.QueryString.

1: JS-kodningsmetoden er URT-8

2: Serversiden har konfigureret standardindstillingen til GB2312

3: Request.QueryString kalder HttpUtility.UrlDecode som standard for at dekode de modtagne parametre med systemkonfigurationskodning.

1: Systemet vælger standardkodningen i følgende rækkefølge: http anmodningsheader - >globaliseringskonfigurationsnode - standard UTF-8

2: Når URL'en indtastes direkte til kinesisk, kan forskellige browsere håndtere det forskelligt, for eksempel: IE koder ikke og indsender direkte, Firefox indsender URL'en efter GB2312-kodningen.

3: For ukodede "kinesiske tegn", efter brug af Request.QueryString internt kald HttpUtility.UrlDecode, af gb2312->utf-8,

Hvis det kinesiske tegn ikke findes, vil det som standard blive konverteret til "%ufffd", hvilket resulterer i irreversible forvrængede tegn.

4: Vejen til løsning
Med kendskab til princippet er der mange måder at løse det på:
1: Den globale forening er UTF-8-kodning, som sparer besvær og bekymring.

2: Når GB2312 er globalt specificeret, er url'en kinesisk, og js skal kodes, som ext.js framework.

På denne måde kan du kun håndtere det specielt, ved at specificere kodning og dekodning på serversiden.
Fordi standardsystemet kalder HttpUtility.UrlDecode("xxx", kodningen af systemkonfigurationen) én gang,
Så kalder du HttpUtility.UrlEncode("xxx", kodningen konfigureret af systemet) igen for at vende tilbage til den oprindelige urt-8 kodningsparameter

Brug derefter HttpUtility.UrlDecode("xxx", utf-8) til at dekode det.
streng AAA = anmodning. Request.QueryString["admin"];    Boligejer
                            string a1 = HttpUtility.UrlEncode(aaa, System.Text.Encoding.GetEncoding("GB2312"));
                            streng a2 = HttpUtility.UrlDecode(a1,System.Text.Encoding.UTF8);








Tidligere:Hej
Næste:Sikke en algoritme, jeg har været deprimeret i flere dage.
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com