var str = "test12!#@<смайлик>";
var utf16bytes = Encoding.Unicode.GetBytes(str);
var utf16reversed = Encoding.Unicode.GetString(utf16bytes); #test12!#@<смайлик>
вы что-то где-то путаете, проверяйте свой хендлер и то, как и в какой кодировке вы данные отправляете. та-же разница в BE/LE между машинами может к веселым багам приводить. Ну и в целом - так как делаете вы - делать нельзя. Если у вас на 256 СИМВОЛ попадет "<смайлик>" (т.е. суррогат, который состоит с 2ух реальных символов), но у вас возникнет ошибка при декодинге. Потому как минимум - нужно использовать енкодер со состоянием (var enc = Encoding.Unicode.GetEncoder(); ...). Ну или реализовать это самому через проверку char.IsLowSurrogate/char.IsHighSurrogate.
UPD: даже у тостера оказывается проблема с суррогатами, вместо <смайлик> должен был быть U+1F60A (
https://www.compart.com/en/unicode/U+1F60A)