如何在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:
配置完成后原样运行你原本的scaffold命令,生成的所有C#文件即为UTF-8编码。[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 chcp 65001 | Out-Null - 永久配置(免重复操作)
打开PowerShell Core的用户配置文件:
在文件末尾追加上述两行编码配置,保存后重启PowerShell Core即可永久生效,无需每次启动会话手动输入。notepad $PROFILE
兜底校验方案
如果完成编码配置后仍存在个别文件编码异常,可在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
相关产品推荐
相关产品推荐

