You need to enable JavaScript to run this app. 如何在PowerShell Core中设置dotnet ef CLI生成文件的编码为UTF-8
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell Core中设置dotnet ef CLI生成文件的编码为UTF-8

PowerShell Core 7.1 修复dotnet ef scaffold生成西欧编码文件的方案

你之前排查时仅对比$OutputEncoding变量的差异,排除了PowerShell默认编码直接被工具调用的可能,这个方向是对的——实际原因是EF Core 3.1版本的scaffold工具在写入生成的C#文件时,会直接读取当前进程关联的控制台代码页判断写入编码,而非PowerShell的$OutputEncoding配置。在PowerShell Core 7.1默认Windows环境下,进程默认控制台代码页为cp1252(即“西欧(Windows)”编码),因此生成的文件编码不符合预期。

落地操作步骤

  • 单次临时生效(优先推荐)
    执行原scaffold命令前,先在当前PowerShell Core会话执行两行配置,强制切换当前进程的关联编码为UTF-8:
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    chcp 65001 | Out-Null
    
    配置完成后原样运行你原本的scaffold命令,生成的所有C#文件即为UTF-8编码。
  • 永久配置(免重复操作)
    打开PowerShell Core的用户配置文件:
    notepad $PROFILE
    
    在文件末尾追加上述两行编码配置,保存后重启PowerShell Core即可永久生效,无需每次启动会话手动输入。

兜底校验方案

如果完成编码配置后仍存在个别文件编码异常,可在scaffold执行完成后,运行批量转换脚本,将生成目录下的所有C#文件统一强制转为UTF-8编码:

Get-ChildItem -Path "Table1/DataAccess" -Filter *.cs -Recurse | ForEach-Object {
    $content = Get-Content $_.FullName -Raw
    [System.IO.File]::WriteAllText($_.FullName, $content, [System.Text.Encoding]::UTF8)
}

注意:不建议为了解决这个问题开启Windows系统层面的“Beta:使用Unicode UTF-8提供全球语言支持”全局设置,该选项会导致大量老旧Win32应用出现乱码兼容问题,投入产出比极低。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 10:06:03