Kort svar: "\x99", i.e. hex 99, är inte värdet för "Ö" i någon av de vanliga teckenkodningarna – ASCII, EASCII Latin 1, eller UTF-8.
Långt svar:
ASCII är 7-bitars kod, och sträcker sig bara till hex 79 / decimal 127, och som namnet antyder har den bara de tecken som amerikanerna behöver, i.e. inga åäö:n. ASCII plus en åttonde bit (vilket sträcker sig till hex FF, dec 255) kallas Extended ASCII, och finns i många varianter beroende på språk och region. För att slippa bråka med olika EASCII varianter beroende på land används idag främst UTF-8, vilken är en teckenkodning som använder en till fyra bytes för att representera alla tecken i Unicode – en enda teckenuppsättning för alla språk.
Vi studerar hex 99 i olika kodningar:
I ASCII är hex 99 odefinierat, då definitionsmängden bara är [x0, x79].
I EASCII Latin 1, vilket är den utökade variant av ASCII som varit standard i norden, så är x99 en kontrollkod, och representeras visuellt med "™". Värdet för "Ö" är xD6.
UTF-8 är gjord för att vara bakåtkompatibel med ASCII och börjar även med sama tecken som Latin 1, men med lite annan kodning. Kodpunkten för "Ö" är likt Latin 1 nr D6 (betecknat U+00D6, \u00D6 i C), men representeras med "\xc3\x96" i hex pga. hur UTF-8 fungerar.
Efter lite sökande fann jag till slut även en kodning där x99 faktiskt motsvarar Ö! I just IBM850 kodningen, också känd som DOS Latin 1, är detta fallet. Jag skulle gissa på att din (E)ASCII referens kommer från DOS-tiden, och att du arbetar med denna förlegade kodning. Använd en en modern referens för UTF-8 så blir det nog mindre förvirrning ska du se.