【问题标题】:Git messes up with non-ascii characters on Linux containerGit 搞乱了 Linux 容器上的非 ascii 字符
【发布时间】:2019-07-09 15:02:24
【问题描述】:

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

var input = "£";

但是当我在 Docker 容器 (microsoft/dotnet:2.2-sdk) 中执行 git clone 时,它​​会搞砸并显示为 (在 bash 中使用 cat)。

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

我使用的windows编辑器是VS 2017,但是字符在其他windows机器上显示正常,并通过dotnet run/test命令正确解析,所以我认为这不是字符保存失败的问题。

任何想法为什么我会看到这样的混乱以及如何解决它?

一些细节

  • 我使用Encoding.UTF8.GetBytes("£"); 获取字节
  • 它在Windows 10 机器上运行良好
  • Linux 版本Debian GNU/Linux 9 (stretch) 来自cat /etc/os-release
  • locale -a 返回 C C.UTF-8 POSIX
  • 在 Windows Notepad++ 上,打开时声称是 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   "   ;

【问题讨论】:

  • 您在 Windows 上的编辑器(或 IDE 项目)中使用哪种字符编码?您在 Linux 上使用哪种语言环境?
  • ...您的全局和项目的 Git 配置文件/设置是什么。你使用任何 Git 钩子吗?
  • @Bodo Windows 上的编辑器是 Visual Studio。但是在另一台 Windows 笔记本电脑上克隆时效果很好,因此我认为问题不在 Windows 端
  • @bodo locale -a 显示 C C.UTF-8 POSIX
  • @eddyP23 请edit您的问题添加所有请求的信息,而不是在 cmets 中回答。可能 Windows 和 Linux 使用不同的编码。在 Linux 上,请运行 fgrep 'var input' yourfile|od -tx1 -c。在 Windows 上,您可以在 Notepad++ 中打开文件时尝试找出文件的编码。 Notepad++ 中显示的字符是否正确?在“编码”菜单中选择了什么?如果字符显示不正确,请尝试其他编码。

标签: linux git character-encoding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多