Это неверно:
byte[] bytes = Encoding.Default.GetBytes(rawstring);
string encodedStr = Encoding.UTF8.GetString(bytes);
Первая строка получает байты, используя кодировку по умолчанию.В .Net Core это UTF-8, и вы, вероятно, в порядке, но в Windows это системная кодовая страница ОС, которая может быть что угодно .
Затем вторая строка кода обрабатывает эти байты, как будто они уже в формате UTF-8, независимо от того, что вы на самом деле получили.Это может работать для большого количества строк, но в конечном итоге это может провалиться эффектно.Более того, результатом по-прежнему является строка .Net, которая является внутренней кодировкой Unicode (UTF-16) ... так что в итоге вы по-прежнему получаете UTF-16, , а не UTF-8 .
Если вам нужно отправить строку UTF-8 сетевой службе, получите байты UTF-8, используя Encoding.UTF8.GetBytes()
, и отправьте байты, как если бы они были строкой.