Hippopotame (./802) :
Pollux (./801) :
y a aucune exception
"printing character" = "symbole dont le seul effet est d'être imprimé à la suite du précédent", "non-printing character" = "symbole affectant l'impression de façon différente"
Voilà : on divise artificiellement les caractères en deux classes.
La division n'a rien d'artificielle, et les caractères de contrôle ne sont pas des caractères "à proprement parler"... (au sens de "caractère d'imprimerie")
Les caractères imprimables sont les données elle-mêmes (le texte), les caractères non-imprimables sont des métadonnées ^^ (où placer le texte)
Le seul problème c'est que la classe de métadonnées exprimables est très variable selon les programmes (perso je pense qu'il ne devrait pas y avoir d'autre caractère de contrôle qu'\n), mais de toute façon de nos jours ça s'est à peu près standardisé pour n'accepter plus que \n et \t

Isomorphes ? Oui, si tu veux, mais alors ton isomorphisme n'a rien de canonique, et qd on veut faire les choses proprement c'est justement une bonne idée d'éviter de donner le même type à deux choses qui n'ont pas d'isomorphisme "propre" entre eux...
Hmm, en C, char se transtype "canoniquement" en int, non? D'ailleurs char est le type des octets. A moins qu'ils n'aient encore rajouté des couches de merdouille pas possible dans la Sainte Norme, merdouille qui n'intéressent personne sauf quand ça buggue.
Le C est tout sauf propre

D'ailleurs il ne fait pas abstraction des encodages et tout ça...
(et char *est* un type entier, il n'a de caractère que le nom -- même les constantes de caractère sont des int)
qui justement ne sont pas isomorphes du tout, a priori (taille multiple d'un octet / taille multiple d'un quartet, je crois ?)
Une chaîne (de caractères) RPL peut être de taille demi-entière (en octets), ya pas de problème.
D'ailleurs c'est rigolo de concaténer de telles chaînes
(certains s'en servent comme moyen.
Et c'est toi qui viens me parler de propreté

(et puis tu n'as pas fi.
"sérialisation"
Ben justement c'est encore une nouvelle couche de conneries et de complications inventée parce que les informatichiens n'ont pas pu faire simple au début.
C'est pas une couche de connerie, il faut de toute façon choisir une représentation (de préférence bien spécificiée, ce qui lui donne donc un statut un particulier) pour les données... La représentation binaire en mémoire diffère selon les plateformes, selon les implémentations (et c'est une bonne chose) et même selon le déroulement du programme (tu ne peux pas recopier un pointeur tel quel), donc je ne vois pas bien ce que tu essayes de proposer en parlant de "faire simple" ^^
Et puis il y a aussi des impératifs de sécurité, dans les cas où le type statique ne suffit pas à garantir l'intégrité des données (par exemple un entier n'est pas "dangereux" [et encore, il peut y avoir denial of service si les entiers ne sont pas de taille bornée], mais une structure plus compliquée peut l'être si on ne s'assure pas que certains invariants sont effectivement vérifiés), donc l'importation de données n'est jamais "transparente" et nécessite toujours des spécifications bien précises, et des vérifications coûteuses. Choisir une sérialisation différente de la représentation mémoire interne ne change donc pas gd-chose...