Avatar ·

Como obter uma representação consistente de bytes de uma string em C# sem especificar explicitamente a codificação?

Olá! Sou um desenvolvedor C# iniciante e tive um problema com a conversão de strings em bytes. Preciso enviar dados de string pela rede e salvá-los em um arquivo, mas notei que, ao ler de volta, os dados às vezes são diferentes. Tentei usar `Encoding.Default`, mas em computadores diferentes o resultado é diferente. Depois tentei `Encoding.ASCII`, mas ele não suporta letras russas e outros caracteres Unicode. Atualmente estou fazendo assim: ```csharp string text = "Привет, мир!"; byte[] bytes = Encoding.UTF8.GetBytes(text); string restored = Encoding.UTF8.GetString(bytes); ``` Isso funciona, mas a pergunta é: por que devo sempre especificar explicitamente `Encoding.UTF8`? O .NET não pode determinar automaticamente a codificação correta? Afinal, strings em C# já são armazenadas internamente em Unicode. Por que não existe um método simples como `text.ToBytes()` ou `text.GetBytes()`? No Stack Overflow, vi uma pergunta semelhante com um milhão de visualizações, mas lá recomendam sempre especificar a codificação. Mas acho isso inconveniente e fácil de err