次の抜粋を見ることができるCSVファイルがあります。
ファイルをスクロールして、これらの「黒い」文字を見つけました。ファイルは巨大です(32Mb)。ファイルがどのエンコーディングであるかわかりません。現時点では、Notepad ++は "Encode in UTF-8"に設定されています。また、ASCII-> HEX(プラグイン->コンバーター-> ASCII-> HEX)を実行しようとすると、次の出力が得られます。
EDA0BDEDB88A
私が知りたいのですが:
黒い文字は、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サイト を使用できます。ここでは、テキストを入力し、エンコーディングを指定し、それを別のエンコーディングに変換して、どの文字にマップされるかを確認できます。