Git在Linux容器上弄乱了非ASCII字符

时间:2019-07-09 15:02:24

标签: linux git character-encoding

我有一个.Net Core(C#)项目,其中一个类包含以下行:

var input = "£";

但是,当我在Docker容器(microsoft/dotnet:2.2-sdk)中进行git克隆时,它会将其弄乱并显示为(在bash中使用cat)。 / p>

当我运行它时,它的Utf-8个字节是[239, 191, 189] = [EF, BF, BD],这似乎是所谓的Unicode replacement character

我使用的Windows编辑器是VS 2017,但是字符在其他Windows机器上可以正确显示,并且可以通过dotnet run/test命令正确解析,因此我认为这不会导致无法正确保存字符的问题。

有什么主意为什么会看到这样的混乱以及如何解决?

一些详细信息

  • 我使用Encoding.UTF8.GetBytes("£");
  • 获取字节
  • 它在Windows 10机器上运行得很好
  • Debian GNU/Linux 9 (stretch)中的Linux版本cat /etc/os-release
  • locale -a返回C C.UTF-8 POSIX
  • 在Windows记事本++上,当打开时,它声称是ANSI并正确显示。

运行fgrep 'var input' file.cs | od -tx1 -c

0000100  76  61  72  20  69  6e  70  75  74  20  3d  20  22  a3  22  3b
          v   a   r       i   n   p   u   t       =       " 243   "   ;

1 个答案:

答案 0 :(得分:1)

您的文件包含单个字节a3,它对应于Windows-1252字符£的编码。您的Linux系统显示,因为它不是有效的UTF-8编码。

您应将Visual Studio配置为使用UTF-8而不是Windows-1252。