Je kan er vanuit gaan dat als veel mensen iets nodig hebben, Microsoft wel iets handigs in C# of .Net heeft gestopt. En encoding is iets dat veel mensen nodig hebben.
Verder lijkt het erop dat je niet volledig begrijpt hoe alles werkt. Net zolang prutsen totdat alles werkt is niet de juiste methode. Zorg eerst dat je de documentatie volledig begrijpt en pas die toe. Bij een fout/bug probeer die te begrijpen en lees je eventueel de documentatie beter. Pas als je alles goed denkt te weten fix je de bug.
Over de encoding:
Characters zijn dingen die wij zien. Om deze op te slaan en weer terug te toveren is er een mapping nodig van character naar bitjes/bytes. Deze mapping is de encoding (waarvan ascii wel de bekendste is).
In C# is er een speciaal datatype voor een character: char (een string is een reeks van chars). Het is het makkelijkste als je intern hier mee werkt. Dat de encoding UTF16 is doet er vrijwel nooit toe.
Tekst buiten C# is vaak in verschillende/andere encodings. Wat je dus nodig hebt is 1 conversie naar string bij binnenkomst en 1 conversie van string bij vertrek. Omdat conversie zo algemeen is kan het vaak tegelijk in de ontvang- of verzendfunctie uit een library. Is dit niet mogelijk, dan heb je **1** regel extra code nodig (uitlezen/ontvangen geeft byte[] en ene regel conversie maakt daarvan een string).