1

Rails アプリケーションで使用するために、Postgres にインポートされたデータがあります。しかし、どういうわけか、外国語のアクセントが奇妙にエンコードされています。

  • ä次のように表示されますâ§
  • á次のように表示されますâ°
  • é次のように表示されますâ©
  • ó次のように表示されますââ¥

Rails の問題ではなく、データの整合性に問題があると確信しています。私が試したどのエンコーディングとも一致しないようです:

# Replace "cp1252" with any other encoding, to no effect
"Trollâ§ttan".encode("cp1252").force_encoding("UTF-8") #-> junk

私が苦しんでいるエンコーディングの混同の種類を誰かが特定できたら、それは素晴らしいことです.

最後の手段として、破損した各アクセント文字を手動で置き換える必要があるかもしれませんが、誰かがプログラムによる解決策を提案できる場合 (またはこれを修正するための出発点でさえあります-デバッグが非常に難しいことがわかりました)、私はv. 感謝しています。

4

1 に答える 1

2

最近のバージョンの PostgreSQL では、UTF8 データベース内に無効な UTF8 を持つことはほとんどありません。ただし、その出力につながる可能性のある他の可能性があります。

éとして表示される典型的なケースでは©、次のいずれかです。

  1. データベースのコンテンツは有効ですが、一部のクライアント側レイヤーは、データベースからのバイトを iso-latin-something であるかのように解釈していますが、UTF8 です。

  2. コンテンツは有効であり、SQL クライアント側レイヤーは有効ですが、これを表示している端末/ソフトウェア/Web ページは、iso-latin1 または同様のモノバイト エンコーディング (win1252、iso-latin9..) 用に構成されています。 .)。

  3. データベースのコンテンツは、有効な UTF8 エンコーディングの間違った文字で構成されています。iso-latin-something バイトを取得し、それらを UTF8 表現に変換し、結果のバイト ストリームをまだ iso-latin であるかのように取得し、もう一度 UTF8 に再変換し、それを挿入すると、このようになります。データベースに。

©シーケンスは UTF8 と iso-latin の混同では一般的ですがâ、すべてのサンプル文字列に追加が存在することは一般的ではないことに注意してください。これは、最初の誤解に加えて、別の誤解の結果である可能性があります。ケース #3 の場合は、検索置換に基づく自動修正が、すでにトリッキーな通常のケースよりも難しいことを意味する可能性があります。

于 2012-09-10T17:52:24.590 に答える