2017-06-07 12 views
1

私はpostgreSQLデータベースで作業していますが、ロシア語、中国語、韓国語、英語などのさまざまな言語のテキスト列があります。 UTF-8以外の文字。非UTF8でエンコードされた非表示の文字を特定する

例えば、notepad ++の画像がエンコード>エンコードをUTF-8で行った場合、すべての認識できない文字がきれいに表示されます。

しかし、ポストグルでは処理不能なレコードをマークすることに問題があります。フラグのようなものもあるはずですが、私は以下のようなものを試していますが、notepad ++は非表示/非UTF-8文字を明示的に示しています。

メモ帳++ notepad++ UTF-8

これらの文字についての奇妙なことは、彼らが定期的に選択クエリを表示されませんが、私は彼らが「UTF-8」に変換するときに、それらは以下のように現れていることです。

データベース enter image description here

は(クエリ以下)は、このような何かをしようとしましたが、すなわち私に所望の出力を与える動作するようには思えません。隠れたHTML参照が無効で、スナップショット内の有効なロシア語の文のような有効なテキストを失わないようなレコードにフラグを設定することが期待されます。そのようなテキストだけを明確に識別することができなければならない。

select text, text ~ '[^[:ascii:]]', text ~ '^[\x00-\x7F]*$' 
from sample_data; 

サンプルデータ -

"ЯненаркоманЭтоуменявсегда、когдамнеафигитительноАеслисерьёзно、этоинтересно、...。。"

「雅ルdieronアモール#UberCALAVERITAの写真は? "

"СегоднявалютныестратегиBMOобновилипрогнозыпоосновнымвалютамнаближайшиепятькварталов(наконецпериода):читатьдалее..." "グループのONトロントでのエグゼクティブAdmininstrativeアシスタント、"

「Flicitations恩恵を受ける6つのトロフィー#FundGradeAと2016年のドンはプレースメントを交信します: "

答えて

1

この回答は、問題の解決に役立ちます。それはあなたが求めている方向に進むのを直接助けるものではありません。

FlicitationsとF \ 302 \ 202licitationsを見ると、エスケープは8進数のように見えます。これはおそらく "IDE"やconvert_toの機能のプレゼンテーションの選択肢です。 8進数から\ 302 \ 202は0xC2 0x82で、decoding as UTF-8はU + 0082を返します。 Unicodeでは、これは制御文字ですが、ISO 8859-1では文字ではないため、レンダリングの一部が見えなくなったり、スペースを取らなかったりする理由が説明されているかもしれません。

今、Flicitationsはフランス語の単語Félicitationsに似ているとGoogleから伝えられています。だから、おそらく、éが0x82としてエンコードされている文字セットとエンコーディングがあります。 Wikipediaはここに役立ちます - 確かにそこにあります:IBM850、いくつかのフランス語のテキストに使用されています。

だから、誰かがユーザーのテキストを誤って処理してデータが失われているようです。 テキストエンコーディングの基本的なルールは、テキストバイトは、書き込まれたのと同じエンコーディングで読み込まなければならないということです。推測しないでください。標準、仕様、ドキュメンテーション、またはコンベンションを尋ねるか、参照する。たぶん、あなたは戻って、誤ったプロセス/コードを見つけて、少なくとも将来のデータ消失を防ぐことができます。


「非UTF-8文字の処理」:実際には非UTF-8文字はありません。 UTF-8は、Unicode文字セットのエンコーディングです。例外を含む領域がありますが、実際にはUnicodeにはすべての文字が含まれており、UTF-8ですべての文字をエンコードできます。したがって、UTF-8以外の文字があると思われる場合、ライターは非準拠であるか、またはリーダーが間違ったエンコーディングを使用しています。

関連する問題