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

C#编译器无法正确解析源码中文 运行输出乱码如何解决

问题根因

两个独立问题共同导致中文输出为问号:

  • C#编译器(Roslyn)对无BOM头源码的默认编码识别规则和Python不同:在简体中文Windows环境下,无UTF-8 BOM的源码会被默认按GBK(代码页936)解析。你代码中的繁体中文不在GBK字符集覆盖范围内,编译阶段就已经被替换为问号,这部分乱码在编译时就已产生,和运行环境无关。西班牙文所用字符全部在GBK覆盖范围内,因此可以正常解析输出。
  • Windows系统自带的cmd、传统PowerShell控制台默认输出编码不是UTF-8,即便编译阶段字符解析正确,编码不匹配也会导致控制台显示中文异常。
解决步骤

1. 将所有C#源码文件转换为UTF-8带BOM编码

根据你用的编辑器选择对应操作:

  • VSCode:点击窗口右下角显示当前文件编码的位置,选择「通过编码重新保存」,选中UTF-8 with BOM即可
  • Notepad++:点击顶部菜单栏「编码」选项,选择「使用UTF-8-BOM编码」,之后保存文件
  • Windows记事本:点击「文件-另存为」,在窗口底部的编码下拉菜单中选择UTF-8,覆盖原文件保存即可(Windows记事本保存的UTF-8格式默认带BOM)

验证方式:转码后重新执行dotnet run,如果控制台输出的问号复制到记事本中仍然是问号,说明转码操作未生效;如果复制出来是正常中文,仅在控制台显示为方块或乱码,继续执行第二步配置即可。

2. 配置控制台输出编码为UTF-8

二选一即可,优先选第一种代码配置的方案,不受系统环境影响:

  • 代码配置(推荐):在Main方法最开头加入以下两行代码,指定控制台输入输出编码为UTF-8:
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.InputEncoding = System.Text.Encoding.UTF8;

修改后重新执行dotnet run即可正常显示中文。

  • 控制台临时配置:每次运行程序前,在当前控制台窗口执行命令chcp 65001,切换控制台代码页到UTF-8后再运行程序。该方法仅对当前窗口生效,新开控制台需要重新执行命令。
补充说明

Python可以正常输出同内容中文,是因为Python3默认优先按UTF-8编码解析源码,不受系统默认代码页影响,和C#编译器的默认解析逻辑不同,不属于环境异常。
如果按上述步骤操作后仍有问题,检查项目的.csproj文件中是否手动配置了错误的编码规则或语言版本,默认新建的.NET项目不需要额外添加编码相关配置,按上述步骤调整后即可正常显示中文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:48:28