0

照合順序が windows-1252 に設定されていると主張する従来のデータベースがあり、テキスト フィールドの内容を次のように保存しています。

I’d

従来の Web アプリで表示するI’dと、ブラウザーと同じように表示されます。ブラウザは、UTF-8 のページ エンコーディングを報告します。その変換がどのように行われたかわかりません (オンザフライの検索と置換によるものではないことはほぼ確実です)。これは私にとって問題です。なぜなら、テキスト フィールド (および他の多くの同様のフィールド) を従来のデータベースから新しい UTF-8 データベースに取り込んでいるからです。新しい Web アプリは、新しいデータベースからのテキストを次のように表示します。

I’d

として表示したいと思いI’dます。I’dレガシ アプリがこれをどのように達成できたのかわかりません (Ruby をいじっても、文字列をに変換する方法がわかりませんでしたI’d)。

私はここのどこかで自分自身を結び目にしました。

4

1 に答える 1

1

おそらく、前の開発者がデータ挿入を台無しにした (または、どこかで台無しにしている) ことを意味します。シナリオは次のようになります。

  • データベース接続はに設定されていますlatin1
  • アプリは実際にUTF-8をデータベースに送信します
  • データベースは受信したデータlatin1
  • アプリはデータを再度クエリします
  • データベースは ’ でエンコードされた値を返しますlatin1
  • app はデータを UTF-8 として解釈し、結果として '</li>

良いデータを得るには、本質的に同じ誤解をする必要があります。現在、utf8接続を介してデータベースにクエリを実行している可能性があるため、データベースは UTF-8 でエンコードされた ’ を返します。必要なのは、latin1接続を介してクエリを実行し、代わりにデータを UTF-8 として解釈することです。

このすべての詳細な説明については、Web アプリでの Unicode の前面から背面への処理を参照してください。

于 2015-01-11T23:25:37.510 に答える