Attention ! ce n'est pas le codage qui transforme les caractères spéciaux en entités HTML.
Le codage permet d'afficher nativement un certain nombre de caractères sans avoir à utiliser l'entité HTML correspondante. Ainsi, le codage ISO-8859-1 permet d'afficher sans effort des caractères comme à, é, î, ñ ; en revanche, comme il n'inclut pas des caractères comme le symbole de l'euro ou le e dans le o, on est contrait d'utiliser les entités HTML correspondantes (€ et œ pour les deux exemples donnés) si l'on veut que les caractères exclus du codage s'affichent proprement. Quant à l'UTF-8, comme il tient compte des différents systèmes d'écriture et de tous les caractères spéciaux possibles et imaginables, il n'est pas nécessaire de coder les caractères spéciaux en entités HTML.
C'est à celui qui code le HTML de coder en entités HTML le caractère spécial en question s'il n'est pas reconnu par le codage utilisé ou s'il peut porter à confusion avec les caractères utilisés dans la syntaxe du (X)HTML et du XML.
Autrement dit, si tu dois saisir le symbole de l'euro, tu pourras le faire tel quel si tu utilises l'ISO-8859-15 ou l'UTF-8, le recours à € n'étant nécessaire que pour les codages qui n'en tiennent pas compte, comme l'ISO-8859-1. En revanche, si tu dois afficher un <, un > ou un &, tu es contraint d'utiliser les entités correspondantes (à savoir, respectivement, <, > et &), quel que soit le codage utilisé (de même pour un " devant figurer dans une valeur d'attribut HTML entouré de guillemets doubles).
Quel codage utiliser ? Pour ma part, je préfère l'UTF-8 : c'est le codage qui nécessite le moins de coder en entités HTML. Encore faut-il que le code soit édité en UTF-8, sous peine qu'on ait l'impression que tu écris comme ça.