web-dev-qa-db-ja.com

Notepad ++で不明な文字の文字エンコードを検出し、検索/置換します

次の抜粋を見ることができるCSVファイルがあります。

screenshot

ファイルをスクロールして、これらの「黒い」文字を見つけました。ファイルは巨大です(32Mb)。ファイルがどのエンコーディングであるかわかりません。現時点では、Notepad ++は "Encode in UTF-8"に設定されています。また、ASCII-> HEX(プラグイン->コンバーター-> ASCII-> HEX)を実行しようとすると、次の出力が得られます。

EDA0BDEDB88A

私が知りたいのですが:

  • これらの黒い文字のエンコーディング。
  • CSVファイル内で同様のオカレンスを見つけるための正規表現
1
user2068804

黒い文字は、Notepad ++がそれらのバイトシーケンスを視覚化できるUTF-8エンドポイントにマップできないことが原因です。ご存知かもしれませんが、各文字は一連のバイトとして格納されます。この場合、それらのバイトは

16進数で

ED A0 BD ED B8 8A

バイナリで

1110 1101 1010 0000 1011 1101 1110 1101 1011 1000 1000 1010

これはあなたの質問に私たちをもたらします。

それらの黒い文字のエンコーディングは何ですか?

これらは2つのUTF-8文字です。より具体的には、最初のものED A0 BDはいわゆる「高代理」であり、2番目のものED B8 8A 'です。低代理 '。一緒に、それらは CSサロゲート を形成します。これらがサロゲート文字であることがわかったので、 サロゲートペアの計算を逆にする

TF-8コードポイントテーブル でこれらのバイトシーケンスを検索すると、最初のバイトシーケンスはU+D83Dにマップされ、2番目のバイトシーケンスはU+DE0Aにマップされていることがわかります。したがって、ペアはD83D + DE0Aです。これはU + 1F60Aにマップされます。これは.....drumrollA smiley

だから、あなたが見ているシーケンスは...スマイリーです。

これらの文字を見つけるための正規表現

これがわかったので、正規表現を使用して次のようなシーケンスを見つけることができます。

\x{D83D}\x{DE0A}

そして、後でコメントに追加した質問について(これは編集です)。

csvファイルでUTF8にない文字を見つけることができる他のユーティリティはありますか?.

ファイルの文字がUTF-8であることを示しました。ただし、それでも質問に答えるために、ツールでいくつかの文字のエンコーディングを手動で見つけたい場合は、 このWebサイト を使用できます。ここでは、テキストを入力し、エンコーディングを指定し、それを別のエンコーディングに変換して、どの文字にマップされるかを確認できます。

1
Wouter