[解決済み] HTMLエンコーディングの問題 - " "の代わりに "Â "文字が表示されます。
質問
レガシーアプリの動作がおかしくなってきました。 このアプリは大量のHTMLを生成し、ActivePDFでPDFレポートに変換しています。
このような流れになります。
- 置き換えたいトークン(例:"~CompanyName~"、"~CustomerName~"など)を含むHTMLテンプレートをDBから引っ張ってきてください。
- トークンを実データに置き換える
- HTMLタグの属性値をプロパティフォーマットする簡単な正規関数でHTMLを整頓する(ActivePDFのレンダリングエンジンは属性値の周りにシングルクォート以外のものを嫌うので、クォートマークなどを確保する)。
- PDFを作成するウェブサービスにHTMLを送ります。
その混乱のどこかで、HTMLテンプレートからのノンブレーキングスペース(
がISO-8859-1としてエンコードされているため、ブラウザ(FireFox)で文書を表示すると、""文字として間違って表示されます。) ActivePDFはこれらのUTF8でない文字を吐き出してしまいます。
質問:この問題がどこから発生しているのか分からないし、それを調査する時間もないので、悪い文字を再エンコードするか、検索して置き換える簡単な方法はないでしょうか? 私が作ったこの小さな関数を通して送信してみましたが、これは <ストライク は、すべてをゴブレットグックに変えてしまう は何も変わりません。
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
何かアイデアはありますか?
EDITです。
今のところ、これで何とかなっていますが、良い解決策とは到底思えません。
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function
解決方法は?
<ブロッククオートこの混乱のどこかで、HTML テンプレートからの非改行スペース (s) が ISO-8859-1 としてエンコードされているため、それらが "♪" 文字として誤って表示されているのです。
それならISO-8859-1ではなく、UTF-8にエンコードしているはずです。ISO-8859-1では改行されていないスペースは0xA0バイトです。UTF-8にエンコードすると0xC2,0xA0となり、(間違って)ISO-8859-1とみなしてしまうと、以下のようになります。
"Â "
. このバイトには、あなたが気づいていないかもしれない末尾のnbspが含まれています。このバイトがない場合、他の何かがあなたのドキュメントを傷つけており、それを見つけるためにさらに上を見る必要があります。
正規表現、テンプレはどうなってるの?もし、あなたの
の文字列は、(正しく)U+00A0 NON-BREAKING SPACE 文字に変換されています。もしそうなら、テンプレートを DOM でネイティブに処理し、ASCII エンコーディングを使って非 ASCII 文字を文字参照として保持するようにシリアライズを依頼すればよいのです。そうすれば、HTML自体で正規表現の後処理をする必要もなくなりますが、これは常に非常に危険なビジネスです。
まあとにかく、今のところ、以下のいずれかをドキュメントの
<head>
を実行し、ブラウザで正しく表示されるかどうかを確認します。
-
HTML4の場合。
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-
HTML5用。
<meta charset="utf-8">
それができていれば、残った問題はActivePDFのせいです。
関連
-
[解決済み】ローカルの実行ファイルへのハイパーリンクを作成する方法は?
-
[解決済み] head」タグと「header」タグの本当の違いは何ですか?[重複】について]
-
[解決済み] フッターの内容が重なっているのを修正するには?
-
[解決済み] Railsアプリケーションにアイコンを追加する
-
[解決済み] mailchimpのメールインラインスタイルのコーディングがいつも通りできない
-
[解決済み] Javaで "unmappable character for encoding "の警告が表示される。
-
[解決済み] 複数のノンブレイキングスペース("nbsp")ではなく、タブスペースを使用しますか?
-
[解決済み] 入力フィールドから属性を読み込むと、HTMLエンコーディングが失われる
-
[解決済み] Java のデフォルト文字エンコーディングの設定
-
[解決済み] " ' "の代わりに "â €™ "が表示されます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このインラインブロックのdiv要素の間に説明のつかない隙間があるのはなぜですか?[重複]
-
[解決済み】エラー。Body " の後の無効な CSS: 期待されるセレクタまたは at-rule は、4 行目の "{" でした。
-
[解決済み] HTMLでSVGを使用して三日月を描画する
-
[解決済み] テーブルセルの背景を透明にする方法
-
[解決済み] bodyタグに追加された奇妙なiframe、`rufous-sandbox`について
-
[解決済み] iFrameがURLを読み込んでいない
-
[解決済み] WebForms UnobtrusiveValidationMode には、'jquery' の ScriptResourceMapping が必要です。jquery という名前の ScriptResourceMapping を追加してください(大文字と小文字を区別します)。
-
[解決済み] Railsです。railsアプリで<img src= >をimage_tagに変換する方法
-
[解決済み] Bootstrapのカラム内で画像を中央に配置する方法 [重複]について
-
[解決済み] <meta charset="utf-8"> vs <meta http-equiv="Content-Type">.