C#、. NET Core,Encoding.UTF8.GetBytes不一致

nop*_*a73 5 .net c# encoding utf-8 .net-core

更新。我在GitHub上创建了一个测试项目,您可以在其中看到测试通过Appveyor(Windows)并通过Travis(Linux和OSX)失败。
https://github.com/nopara73/UTF8Problems/


我有一个.NET Core 2 xUnit测试项目,在这里测试string的UTF8编码"é"。在Windows上,测试通过,在Linux和OSX上,测试失败。


码。

[Fact]
public void CanEncode()
{
    var character = "é";
    var encoded = Encoding.UTF8.GetBytes(character);

    var bytes = new byte[] { 195, 169 };

    Assert.Equal(bytes, encoded);
}

[Fact]
public void CanDecode()
{
    var character = "é";

    var bytes = new byte[] { 195, 169 };
    var decoded = Encoding.UTF8.GetString(bytes);

    Assert.Equal(character, decoded);
}

[Fact]
public void CanEncodeDecode()
{
    var character = "é";
    var encoded = Encoding.UTF8.GetBytes(character);

    var decoded = Encoding.UTF8.GetString(encoded);

    Assert.Equal(character, decoded);
}
Run Code Online (Sandbox Code Playgroud)

输出失败。Travis,Linux:

在此处输入图片说明


问题。

  • 这种行为的原因是什么?
  • 无论平台如何,如何编码此类字符串以确保得到相同的结果?