なんらかの理由でわからないレガシーアプリが動作し始めました。ActivePDFによってPDFレポートに変換される一連のHTMLを生成します。
プロセスは次のように機能します。
- 置き換えられるトークンが含まれているDBからHTMLテンプレートをプルします(「〜CompanyName〜」、「〜CustomerName〜」など)
- トークンを実際のデータに置き換える
- HTMLタグの属性値をプロパティでフォーマットする単純な正規表現関数を使用してHTMLを整頓します(ActivePDFのレンダリングエンジンは属性値を一重引用符で囲んでいないため、引用符などを保証します)。
- PDFを作成するWebサービスにHTMLを送信します。
その混乱のどこかに、HTMLテンプレート(
s)からの改行しないスペースがISO-8859-1としてエンコードされているため、ブラウザー(FireFox)でドキュメントを表示すると、「Â」文字として誤って表示されます。これらの非UTF8文字でActivePDFの悪ふざけ。
私の質問:問題の原因がわからず、問題を調査する時間がないので、問題のある文字を再エンコードまたは検索して置き換える簡単な方法はありますか?私は一緒に投げたこの小さな関数を使って送信してみましたが、すべてを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