ファイルには、テキストファイルとバイナリファイルがあります。
バイナリファイルは0と1の2進数でかかれたファイルで、当該バイナリファイルがCPUで読める場合は、当該CPUとの関係で、機械語と言えます。つまり、機械語はバイナリコードの中でも実行性があるものを指します。
テキストファイルは、バイナリデータを文字コードの符号化方式(UTF-8等)に則って文字を当てかえたデータファイルです。符号化方式の他に、方式に則って割り当てる文字群を符号化文字集合と言います。
符号化文字集合にはUnicodeがあり、これに対応した符号化方式がUTF-8や同16等です。
この符号化方式において、誤った方式が適用されたときに起きるのが文字化けです。つまり、バイナリデータからテキストデータへの変換法則ないしテキストデータからバイナリデータへの変換法則が誤って適用されていることになります。
拡張子とはどのアプリケーションでファイルを開くのかを判断する符号です。
拡張子意外にファイルのヘッダーや、そもそもバイナリデータの配列パターンでファイル形式を判別することも、不可能ではないそうです。
もっとも、その処理が迂遠なので拡張子によって瞬時にファイル形式や適合するアプリケーションの選別が行われています。