Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 22544|Válasz: 0

[Forrás] c# Kérés kap zavaros karaktereket paraméterekhez

[Linket másol]
Közzétéve 2015. 12. 25. 18:41:49 | | | |


Ma reggel egy kollégám kérdezett tőlem: azt mondtam, hogy a kapott paraméterek összezavarosak, hadd segítsek megoldani.


A kollégám által felelős platform Ext.js keretrendszert épített, és a web.config konfigurációs fájl globális "GB2312" kódolással van konfigurálva:

<globalizációs kérésKódolás="gb2312" válaszKódolás="gb2312" fájlKódolás="gb2312" kultúra="zh-CN"/>

Amikor a frontend beküldi a "kínai szöveget", a háttérrendszer összezavarodott karaktereket kap a Request.QueryString["xxx"] betűvel.

Bárhogyan is dekódolsz a System.Web.HttpUtility.UrlDecode("xxx", "kódolási típus") segítségével, az nem működik.

Az elvleírás:
1: Az első dolog, amit meg kell határozni, hogy amikor az ügyfél URL-paramétereit benyújtják, Ext.js kódolja őket, mielőtt beküldené őket, és az ügyfél kódolása alapértelmezetten UTF-8 kódolás


2: Akkor miért zavarodott el, amikor a paramétereket Request.QueryString["xxx"]-szel kapjuk?

Lépésről lépésre fordítjuk a fordítást,
2.1: Nézd meg a QueryString tulajdonság kódját:


2.2: Vágás a FillInQueryStringCollection() metódusba


2.3: Vágás: QueryStringEncoding

A QueryStringEncoding kódból a rendszer alapértelmezettként a globalizációs konfigurációs csomópont kódolási módszerére vált, ha nem, akkor az alapértelmezett UTF-8 kódolás
2.4: Vágás FillFromStringbe (string s, bool urlencoded, Encoding encoding)

Ettől a ponttól kezdve minden paraméter bemenetet egyszer hívunk: HttpUtility.UrlDecode(str2, encoding);

Amikor a js kliens utf-8 kódolással küldi be a szervernek a kínaiat, amikor Request.QueryString-rel kapja meg, először egyszer dekódolja a gb2312-vel, amelyet a globalizáció konfigurált, ami összezavarodott karaktereket eredményez.

1: A JS kódolási módszer az URT-8

2: A szerveroldal beállította az alapértelmezett GB2312-t

3: Az Request.QueryString alapértelmezetten hívja a HttpUtility.UrlDecode-ot, hogy a kapott paramétereket rendszerkonfigurációs kódolással dekódolja.

1: A rendszer az alapértelmezett kódolást a következő sorrendben választja: http kérés fejléc - >globalizációs konfigurációs csomópont - alapértelmezett UTF-8

2: Amikor az URL-t közvetlenül kínai nyelvre írjuk be, különböző böngészők másképp kezelhetik azt, például: az IE nem kódol, és közvetlenül beküldi, a Firefox pedig a GB2312 kódolás után küldi be az URL-t.

3: Kódolatlan "kínai karakterek" esetén, miután a Request.QueryString belső hívást használtak a HttpUtility.UrlDecode, gb2312->utf-8 által,

Ha a kínai karakter nem található, alapértelmezés szerint "%ufffd"-re alakul át, ami visszafordíthatatlan, zavaros karaktereket eredményez.

4: Az út a megoldáshoz
Az elv ismeretével sokféle módja van a megoldásának:
1: A globális egységesítés az UTF-8 kódolás, ami megspórolja a gondot és az aggodalmat.

2: Amikor a GB2312 globálisan van megadva, az URL kínai, és a js-t kódolni kell, például ext.js keretrendszert.

Így csak különlegesen tudod kezelni, a kódolást és a dekódolást a szerver oldalon lehet megadni.
Mivel az alapértelmezett rendszer egyszer hívja a HttpUtility.UrlDecode-ot ("xxx", a rendszerkonfiguráció kódolása),
Tehát ismét hívod a HttpUtility.UrlEncode-ot ("xxx", a rendszer által konfigurált kódolás), hogy visszatérjen az eredeti urt-8 kódolási paraméterhez

Ezután használd a HttpUtility.UrlDecode("xxx", utf-8) kódolást.
String AAA = kérés. Request.QueryString["admin"];    Háztulajdonos
                            string a1 = HttpUtility.UrlEncode(aaa, System.Text.Encoding.GetEncoding("GB2312"));
                            string a2 = HttpUtility.UrlDecode(a1,System.Text.Encoding.UTF8);








Előző:szia
Következő:Micsoda algoritmus, már napok óta depressziós vagyok.
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com