मुझे एक विरासत ऐप मिल गया है जो सिर्फ दुर्व्यवहार करना शुरू कर रहा है, जो भी कारण मुझे यकीन नहीं है। यह HTML का एक गुच्छा बनाता है जो ActivePDF द्वारा PDF रिपोर्ट में बदल जाता है।
प्रक्रिया इस तरह काम करती है:
- एक DB से टोकन के साथ एक HTML टेम्पलेट खींचें जिसमें इसे प्रतिस्थापित किया जा सके (जैसे "~ CompanyName ~", "~ CustomerName ~", आदि)
- टोकन को वास्तविक डेटा से बदलें
- HTML को एक साधारण रेगेक्स फ़ंक्शन के साथ व्यवस्थित करें जो कि संपत्ति टैग HTML टैग विशेषता मान (उद्धरण चिह्नों आदि को सुनिश्चित करता है, क्योंकि ActivePDF का रेंडरिंग इंजन कुछ भी नफरत करता है, लेकिन विशेषता मानों के आसपास एकल उद्धरण)
- पीडीएफ बनाने वाली वेब सेवा को HTML भेजें।
उस गड़बड़ में कहीं, HTML टेम्प्लेट (
एस) से गैर-ब्रेकिंग रिक्त स्थान को आईएसओ-8859-1 के रूप में एन्कोडिंग किया जाता है ताकि वे ब्राउज़र (फ़ायरफ़ॉक्स) में दस्तावेज़ को देखते समय गलत तरीके से "Â" चरित्र के रूप में दिखाई दें। ActivePDF इन गैर-UTF8 वर्णों पर ध्यान केंद्रित करता है।
मेरा प्रश्न: क्योंकि मुझे नहीं पता कि समस्या कहाँ से उपजी है और इसकी जांच करने का समय नहीं है, तो क्या खराब पात्रों को फिर से एनकोड या खोजने और बदलने का एक आसान तरीका है? मैंने इसे इस छोटे से समारोह के माध्यम से भेजने की कोशिश की है जिसे मैंने एक साथ फेंक दिया है, लेकिन यह सब बदल जाता है gobbledegook में कुछ भी नहीं बदलता है।
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
कोई विचार?
संपादित करें:
मैं इसके साथ अभी के लिए मिल रहा हूँ, हालांकि यह शायद ही एक अच्छा समाधान की तरह लगता है:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function