【发布时间】: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返回CC.UTF-8POSIX - 在 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