Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 22544|Svare: 0

[Kilde] c# Forespørsel mottar forvrengte tegn for parametere

[Kopier lenke]
Publisert på 25.12.2015 18:41:49 | | | |


I morges ble jeg stilt et spørsmål av en kollega: Jeg sa at parameterne som ble mottatt var uforståelige, la meg hjelpe til med å løse det.


Plattformen kollegaen min har ansvar for er bygget Ext.js rammeverk, og web.config-konfigurasjonsfilen er konfigurert med den globale "GB2312"-kodingen:

<globaliseringsforespørselKoding="gb2312" svarKoding="gb2312" filKoding="gb2312" culture="zh-CN"/>

Når frontenden sender inn «kinesisk tekst», mottar backenden forvrengte tegn med Request.QueryString["xxx"].

Uansett hvordan du dekodes med System.Web.HttpUtility.UrlDecode("xxx", "encoding type"), fungerer det ikke.

Hovedbeskrivelse:
1: Det første som må avgjøres er at når klientens URL-parametere sendes inn, vil Ext.js kode dem før de sendes inn, og klientens koding er som standard UTF-8-koding


2: Hvorfor er det da utydelig når man mottar parametere med Request.QueryString["xxx"]?

Vi reverserer kompileringen steg for steg,
2.1: Se på koden for QueryString-egenskapen:


2.2: Kutt inn i FillInQueryStringCollection()-metoden


2.3: Kutt: QueryStringEncoding

Fra QueryStringEncoding-koden går systemet som standard over til kodingsmetoden til globaliseringskonfigurasjonsnoden, og hvis ikke, er standarden UTF-8-koding
2.4: Kutt i FillFromString (streng s, bool urlencoded, koding av koding)

Fra dette punktet finner vi at alle parameterinnganger kalles én gang: HttpUtility.UrlDecode(str2, koding);

Når klient js sender kinesisk til serveren i utf-8-koding, vil den først dekode det én gang med gb2312 konfigurert ved globalisering, noe som resulterer i utydelige tegn.

1: JS-kodingsmetoden er URT-8

2: Serversiden har konfigurert standardinnstillingen til GB2312

3: Request.QueryString vil som standard kalle HttpUtility.UrlDecode for å dekode mottatte parametere med systemkonfigurasjonskoding.

1: Systemet velger standardkodingen i følgende rekkefølge: http forespørselshode - >globaliseringskonfigurasjonsnode - standard UTF-8

2: Når URL-en legges direkte inn på kinesisk, kan ulike nettlesere håndtere det forskjellig, for eksempel: IE koder ikke og sender inn direkte, Firefox sender inn URL-en etter GB2312-kodingen.

3: For ukodede "kinesiske tegn", etter bruk av Request.QueryString internt kall HttpUtility.UrlDecode, av gb2312->utf-8,

Hvis det kinesiske tegnet ikke blir funnet, vil det som standard bli konvertert til "%ufffd", noe som resulterer i irreversible utydelige tegn.

4: Veien til løsning
Når man kjenner prinsippet, finnes det mange måter å løse det på:
1: Den globale samlingen er UTF-8-koding, som sparer for problemer og bekymringer.

2: Når GB2312 er globalt spesifisert, er url-en kinesisk, og js må kodes, slik som ext.js rammeverk.

På denne måten kan du bare håndtere det spesielt, ved å spesifisere koding og dekoding på serversiden.
Fordi standardsystemet kaller HttpUtility.UrlDecode("xxx", kodingen av systemkonfigurasjonen) én gang,
Så du kaller HttpUtility.UrlEncode("xxx", kodingen konfigurert av systemet) igjen for å returnere til den opprinnelige urt-8-kodingsparameteren

Bruk deretter HttpUtility.UrlDecode("xxx", utf-8) for å dekode den.
streng aaa = forespørsel. Request.QueryString["admin"];    Huseier
                            streng a1 = HttpUtility.UrlEncode(aaa, System.Text.Encoding.GetEncoding("GB2312"));
                            string a2 = HttpUtility.UrlDecode(a1,System.Text.Encoding.UTF8);








Foregående:Hei
Neste:For en algoritme, jeg har vært deprimert i flere dager.
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com