理由がわからないのに、レガシーアプリが誤動作し始めたところです。ActivePDFによってPDFレポートに変換される一連のHTMLを生成します。
プロセスは次のように機能します。
- 置き換えられるトークンを含むDBからHTMLテンプレートをプルします(例: "〜CompanyName〜"、 "〜CustomerName〜"など)
- トークンを実際のデータに置き換えます
- プロパティがHTMLタグ属性値をフォーマットする単純なregex関数を使用してHTMLを整理します(ActivePDFのレンダリングエンジンは属性値の前後に一重引用符以外のものを嫌うため、引用符などを保証します)
- PDFを作成するWebサービスにHTMLを送信します。
その混乱のどこかで、HTMLテンプレートの改行なしスペース(
s)はISO-8859-1としてエンコードされているため、ブラウザー(FireFox)でドキュメントを表示すると、「Â」文字として誤って表示されます。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