我有一个.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
运行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 " ;
答案 0 :(得分:1)
您的文件包含单个字节a3
,它对应于Windows-1252字符£
的编码。您的Linux系统显示�
,因为它不是有效的UTF-8编码。
您应将Visual Studio配置为使用UTF-8而不是Windows-1252。