При сохранении и воспроизведении на экране букв, цифр, знаков препинания и других текстовых элементов операционная система компьютера использует специальные таблицы. В них все эти символы размещены в строго определенном порядке. Когда вы сохраняете какой-либо документ, содержащий текст, то в файл записываются не сами буквы и цифры, а их порядковые номера в этой таблице. Когда же вы открываете такой документ, то происходит обратная операция - приложение читает из файла номера символов и выводит на странице соответствующие им знаки из таблицы. Эти таблицы называют «наборами символов» (Character Set, сокращенно CharSet) или «кодировками».
Указание кодировки, которую компьютерное приложение должно использовать для отображения текстового содержимого файла, записывается в служебное поле этого файла. Если текст передается по сетям, то указание кодировки отправляется в служебном поле передаваемого пакета информации. В HTML-коде веб страниц для хранения названия использованной кодировки предназначен специальный тег. В письме электронной почты кодировка передается в служебных полях вместе с информацией об отправителе, получателе и т.д. Если указание кодировки любым из перечисленных способов отсутствует, то с крякозябрами придется бороться вручную - попытайтесь подобрать нужную кодировку средствами используемого приложения. Такая функция предусмотрена и в браузере, и в почтовом клиенте, а текстовый редактор (например, Microsoft Word) сам пытается определить правильную кодировку по косвенным признакам.
Кажется, сегодня наконец-то создан стандарт таблицы символов, который удовлетворяет всех - его назвали «Юникод» (Unicode). Но переход на него еще только совершается, поэтому с крякозябрами придется сталкиваться еще несколько лет.