You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core项目非ASCII字符在Linux容器中被Git乱码的问题求助

问题分析与解决

这问题我之前碰到过类似的,核心是Windows和Linux容器间的文件编码不匹配导致的乱码,咱们一步步理清楚:

原因拆解

  1. 文件编码本质:你在Windows上用VS2017保存的文件,实际是Windows-1252编码(也就是Notepad++显示的ANSI),£在这个编码里是单字节0xA3。
  2. Linux容器的解析方式:在Debian容器里,系统默认用UTF-8编码读取文件,但0xA3不是有效的UTF-8字节序列,所以被自动替换成了Unicode替换字符�(对应字节EF BF BD)。
  3. 验证依据:你用fgrep 'var input' file.cs | od -tx1 -c看到的a3就是Windows-1252里的£,但Linux下读的时候因为编码不兼容,就变成了乱码。

解决方法

方法1:将文件转为UTF-8编码(推荐)

这是最彻底的解决方式,避免跨平台编码问题:

  • 在VS2017中,打开文件后点击顶部菜单的文件->高级保存选项,在编码下拉框选择Unicode (UTF-8 带签名)或者UTF-8,保存后重新提交到Git。
  • 或者用Notepad++打开文件,点击编码->转为UTF-8(带或不带BOM都可以,Linux下UTF-8无BOM也能正常识别),保存后提交。

方法2:配置Git自动处理编码转换

在Windows的Git终端里运行以下命令,让Git在提交时自动将文件转为UTF-8:

git config --global core.encoding utf-8
git config --global core.autocrlf true

注意:这个配置要在提交文件前设置,已经提交的文件还是需要手动转编码。

方法3:在代码中指定编码读取(临时方案)

如果暂时不想修改文件编码,可以在读取文件时指定Windows-1252编码:

var content = File.ReadAllText("your-file.cs", Encoding.GetEncoding(1252));

但这不是长远方案,其他开发者协作时仍会遇到同样问题。

内容的提问来源于stack exchange,提问作者eddyP23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:06:24