Avatar ·

如何在 C# 中无需手动指定编码获取字符串的统一字节表示?

大家好!我是 C# 新手,遇到了一个让我困惑的问题。我需要通过网络传输字符串并计算其哈希值,但我发现当我将字符串转换为字节数组时,结果在不同计算机上可能不同。

以下是我的代码示例:

string message = "Привет, мир!";
byte[] bytes = Encoding.Default.GetBytes(message);
// 通过网络发送 bytes 或计算哈希

问题在于 Encoding.Default 会根据系统区域设置给出不同的结果。在我的俄语区域设置的 Windows 上它能正常工作,但在英语区域设置的服务器上却不行。我了解到 Encoding.ASCII 会丢失字符,而 Encoding.Unicode 会添加 BOM(字节顺序标记),这会破坏一切。

我需要一个能在任何平台(Windows、Linux、Mac)上一致工作且无需每次手动指定编码的解决方案。如何在 C# 中正确地将字符串转换为字节而不产生全局问题?