Ja, du har rätt idé om teckenkodningar. Vissa detaljer att tillägga är singel- vs multibytekodningar, och att alla "ID" som du säger inte ens måste vara giltiga tecken i vissa teckenkodningar.
I begynnelsen fanns ASCII (något förenklat ). Det definierar en översättning av talen 0–127 till tecken och kontrollsekvenser.
ASCII fick stort genomslag, och än idag hittar man implementationer som friskt antar att "äsch, allt är väl ändå typ ASCII här i världen". ASCII saknade dock representation av exempelvis å, ä och ö. Inom en byte kan man representera 256 element, så i praktiken fanns det 128 platser kvar "ovanför" ASCII. ISO-8859-1 är ett sätt att fylla på dessa platser med ytterligare tecken med fokus på västerländska behov, vilket gör att vi kunde använda å, ä och ö, samtidigt som man glatt kunde fortsätta läsa ASCII-dokument som en delmängd av ISO-8859-1 (men alltså inte nödvändigtvis vice versa).
256 tecken räcker dock inte långt. Olika kulturer skapade sina egna varianter av ASCII-utökningar för att få sina tecken tillgodosedda. För många andra räckte inte ens det (japanska, kinesiska, …) vilket gav "multibyte-kodningar", där multipla bytes krävdes för att representera ett tecken.
Till slut sade man kollektivt: "Nu räcker det! Vi definierar en teckenuppsättning en gång för alla: Unicode!". Varje tänkbart tecken, och mer därtill, får en unik plats (för närvarande 136 755 tecken definierade enligt Wikipedia), men av tekniska skäl är kampen inte riktigt över ändå: man måste kunna representera dessa teckenelement på något smidigt sätt i form av bitar och bytes, så att alla förstår att det faktiskt är tecknet för en snögubbe (U+2603) som ska stå på ett visst ställe när man läser sina "ettor och nollor".
UTF-8 är en sådan representation av Unicode. UTF-8 har egenskapen att den likt ISO-8859-1 mappar de första 128 elementen i en byte till samma tecken som ASCII. Dock håller den inte med om allt vad ISO-8859-1 säger om talen 128–255, och framför allt tillåter UTF-8 multibytetecken, dvs att man genom en speciell sekvens av bitar kan säga till den som tolkar att "håll i hatten, för att veta vilket tecken som kommer nu så kommer du behöva läsa flera bytes i rad".
UTF-8 är en praktisk kompromiss, som framför allt alltså behåller bakåtkompatibilitet med ASCII, är platseffektiv i vanligen förekommande (västerländsk) text och innehåller även viss resistens mot felöverföringar, på så sätt att man skulle kunna upptäcka om vissa bitar flippats eller tappats i en text. Det finns många andra Unicode-representationer som har andra egenskaper: exempelvis UTF-16, som är inkompatibel med ASCII men potentiellt effektivare platsmässigt för texter som består av många kodpunkter utanför de som vanligen används i västerländska språk. Väldigt värt att lära sig är förhållandet mellan exempelvis just begreppen Unicode, UTF-8 och UTF-16.
Sådana översättningstabeller du söker hittar du säkerligen på Wikipedia för respektive teckenkodning, exempelvis genom länkarna ovan, men var beredd på att det kan vara mer komplext än att alla teckenkodningar bara mappar samma heltal till olika tecken.
☃
Ovan står i någon mån egentligen en bitsekvens likt "111000101001100010000011", men din webbläsare tolkar detta enligt UTF-8:s regler, vilket ger kodelement 9731 i Unicode (0x2603 hexadecimalt), vilket är vad Unicode-konsortiet har bestämt ska betyda "snögubbe". De som gjort ditt teckensnitt har sedan tagit sig mödan att rita en snögubbe som matchar mot detta kodelement, vilket är vad du bör ha sett på din skärm.