मेरा संदेह यह है कि आप क्लासिक फॉर्म पोस्ट कैरेक्टर एन्कोडिंग मिस्चैच समस्या का असफल हो रहे हैं।
यह इस प्रकार है: -
- आप एक रूप है जिसमें ग्राहक UTF-8 एन्कोडिंग का उपयोग कर के लिए प्रस्तुत किया गया है।
- नतीजतन ब्राउज़र यूटीएफ -8 एन्कोडिंग का उपयोग कर फ़ॉर्म में दर्ज टेक्स्ट मान पोस्ट करता है।
- पोस्ट प्राप्त करने वाले एक्शन पेज में इसका उत्तरदायित्व कोड कोड 1252.
- पोस्ट किए गए यूटीएफ -8 स्ट्रिंग के प्रत्येक बाइट को यूटीएफ के डीकोडिंग सेट के बजाय सर्वर द्वारा व्यक्तिगत चरित्र के रूप में माना जाता है। -8 एन्कोडेड बाइट्स को सही यूनिकोड वर्ण में।
- स्ट्रिंग अब दूषित वर्णों के साथ डीबी में संग्रहीत है।
- एक पृष्ठ क्लाइंट को भ्रष्ट वर्ण वाले डीबी फ़ील्ड की सामग्री प्रस्तुत करना चाहता है।
- पेज सेट यह UTF-8 में चारसेट लेकिन इसकी Response.CodePage OEM कोड पृष्ठ पर इस तरह के रूप 1252.
- Response.Write ग्राहक के लिए क्षेत्र सामग्री भेजने के लिए प्रयोग किया जाता है पर बनी हुई है, यूनिकोड वर्ण वापस करने के लिए बदल रहे हैं बाइट सेट के लिए बाइट ईलीयर पोस्ट में प्राप्त किया गया था।
- ग्राहक सोचता है कि यह यूटीएफ -8 प्राप्त कर रहा है, इसलिए यह यूटीएफ -8 के रूप में सर्वर से प्राप्त पात्रों को डीकोड करता है, क्योंकि मूल रूप से वे स्क्रीन पर सही ढंग से दिखाई देते हैं।
- सबकुछ ठीक से बढ़ता है जैसे कि सभी ठीक है, जबकि इन वर्णों को एएसपी के माध्यम से आगे और पीछे बाउंस किया जा रहा है। एक पृष्ठ में एक बग में एक मिलान करने वाली बग है (एक ही पृष्ठ हो सकता है) जो सब कुछ ठीक दिखता है।
यदि आप सीधे SQL सर्वर टूल्स के साथ फ़ील्ड सामग्री की जांच करते हैं तो आपको वहां दूषित तार दिखाई देंगे। अब जब आप इस स्ट्रिंग को किसी अन्य घटक के साथ उपयोग करना चाहते हैं जो सीधे-आगे यूनिकोड स्ट्रिंग की अपेक्षा कर रहा है, तो यह वह जगह है जहां आप यह बग खोजते हैं।
समाधान हमेशा यह सुनिश्चित करना है कि आपके सभी पृष्ठ न केवल प्रतिक्रिया में CharSet = "UTF-8" भेजें बल्कि Response.Write का उपयोग करने से पहले Response.CodePage = 65001 का उपयोग करें और किसी भी Request.Form मानों को पढ़ने का प्रयास करने से पहले। <% @ पृष्ठ शीर्षलेख में कोडपेज निर्देश का उपयोग करें।
अब आप पहले से ही अपने डीबी में भ्रष्ट तारों की मरम्मत के साथ छोड़ दिए गए हैं।
एडीओडीबी का उपयोग करें।स्ट्रीम: -
Function ConvertFromUTF8(sIn)
Dim oIn: Set oIn = CreateObject("ADODB.Stream")
oIn.Open
oIn.CharSet = "WIndows-1252"
oIn.WriteText sIn
oIn.Position = 0
oIn.CharSet = "UTF-8"
ConvertFromUTF8 = oIn.ReadText
oIn.Close
End Function
इस समारोह (जो BTW अपने वास्तविक सवाल का जवाब है) एक भ्रष्ट स्ट्रिंग और स्ट्रिंग यह किया जाना चाहिए था में धर्मान्तरित (बाइट प्रतिनिधित्व की बाइट है कि एक) लेता है। आपको इस परिवर्तन को डीबी में हर क्षेत्र में लागू करने की आवश्यकता है जो बग का शिकार हो गया है।
-1 यह क्लासिक एएसपी है, एएसपी.NET नहीं। –