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

时间:2018-01-13 08:35:43

标签: c# .net encoding utf-8 .net-core

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

我有一个.NET Core 2 xUnit测试项目,我正在测试字符串"é"的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);
}

输出失败。 Travis,Linux:

enter image description here

问题。

  • 这种行为的原因是什么?
  • 我应该如何对这些字符串进行编码,以确保无论平台如何都能获得相同的结果?

0 个答案:

没有答案