私は確信が持てないどんな理由のためにでも、単に不正な動作をし始めているレガシーアプリを持っています。これは、ActivePDFによってPDFレポートに変換される一連のHTMLを生成します。
プロセスは次のように機能します。
その混乱のどこかで、HTMLテンプレートからの切れ目のないスペース(
s)はISO-8859-1としてエンコードされているため、ブラウザ(FireFox)でドキュメントを表示するときに誤って "Â"文字として表示されます。 ActivePDFはこれらの非UTF-8文字をプックします。
私の質問:問題の原因がどこにあるのかわからないし、調査する時間がないので、悪い文字を再エンコードしたり見つけたり置き換えたりする簡単な方法はありますか。私は一緒に投げたこの小さな機能を通してそれを送ろうとしました、しかしそれは それをすべて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
その混乱のどこかで、HTMLテンプレートからの切れ目のないスペースはISO-8859-1としてエンコードされているので、それらは "Â"文字として誤って表示されます。
その場合はISO-8859-1ではなく、UTF-8にエンコードします。非改行スペース文字は、ISO-8859-1のバイト0xA0です。 UTF-8にエンコードされている場合は0xC2,0xA0になります。これを(誤って)ISO-8859-1と見なした場合、"Â "
と表示されます。それはあなたが気づいていないかもしれない末尾のnbspを含みます。そのバイトが存在しない場合は、何か他のものがあなたの文書を壊しているので、さらに調べるためにさらに調べる必要があります。
正規表現とは何ですか、テンプレートはどのように機能しますか?もしあなたの
文字列が(正しく)U + 00A0ノンブレイクスペース文字に変換されているなら、どこかに適切なHTMLパーサが関与しているように思われるでしょう。もしそうなら、あなたはDOMでネイティブにあなたのテンプレートを処理し、文字参照として非ASCII文字を保つためにASCIIエンコーディングを使って直列化するようにそれに頼むことができます。これはまた、HTML自体に正規表現の後処理をしなければならなくなることを防ぎます。
とにかく、とりあえず今のところあなたのドキュメントの<head>
に以下のいずれかを追加して、それがブラウザで正しく見えるかどうかを確かめてください:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta charset="utf-8">
あなたがそれをやったならば、それから残りの問題はActivePDFのせいです。
誰かが私と同じ問題を抱えていて、文字セットがすでに正しい場合は、単にこれを行います。
問題:私たちがCRMシステムへのPOSTリクエストに何らかの文字列を含む '£'を送信するという問題に直面していましたしかし、CRMからGET呼び出しを実行していたときは、文字列の内容と共に 'Â'が返されていました。つまり、 '£'は '£に変換されています。
分析:調査の結果判明した不具合は、POST callでHttpWebRequestContentTypeを "text/xml"に設定したことですGET Call中は "text/xml; charset:utf-8"でした。
解決策:解決策の一部として、POST requestに文字セット:utf-8を含めて動作します。