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

GitLab CI输出非ASCII字符显示乱码(�)问题求助

GitLab Runner非ASCII字符输出乱码问题解决建议

我正在学习GitLab CI相关内容,本地已成功运行GitLab Runner并连接到GitLab项目,编写的命令可正常执行,但控制台输出中的非ASCII字符在GitLab中显示为�。使用的是捷克语本地化的Win10 Pro企业机器,执行tree命令时也出现该问题。以下是我的配置文件,想咨询是否遗漏了相关设置:

我的配置文件

.gitlab-ci.yml

variables:
  PROJECT_FOLDER: 'Code'
  PROJECT_NAME: 'Apps.InfoPanels.Cloud.WebApp'
  TEST_FOLDER: 'Apps.InfoPanels.Cloud.Test'
  TEST_NAME: 'Apps.InfoPanels.Cloud.Test'
  NUGET_PATH: 'C:\NuGet\nuget.exe'
  MSBUILD_PATH: 'C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe'
  COREBUILD_PATH: 'C:\Program Files\dotnet\dotnet.exe'
  NUNIT_PATH: 'C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe'
stages:
  - build
before_script:
  - 'tree'
build:
  stage: build
  script:
    - '& "$env:MSBUILD_PATH" /p:Configuration=Debug ".\$env:PROJECT_FOLDER\$env:PROJECT_NAME.sln"'
  artifacts:
    untracked: true

config.toml

concurrent = 1
check_interval = 0
[[runners]]
  name = "sykora-nb"
  url = "URL"
  token = "TOKEN"
  executor = "shell"
  builds_dir = "C:/GitLab-Runner/builds"
  shell = "powershell"
[runners.cache]

问题原因与解决办法

这个问题本质是编码不匹配:捷克语本地化的Win10默认控制台编码是CP852(OEM编码),而GitLab CI日志是基于UTF-8解析的,两种编码不兼容就导致非ASCII字符显示成�。下面给你几个实用的解决思路:

1. 在.gitlab-ci.yml中强制设置PowerShell编码

直接在before_script里添加编码配置命令,让PowerShell输出UTF-8格式的内容:

before_script:
  # 强制PowerShell使用UTF-8输出
  - '[Console]::OutputEncoding = [System.Text.Encoding]::UTF8'
  - '[System.Console]::InputEncoding = [System.Text.Encoding]::UTF8'
  - 'tree'

这个方法是针对性修改CI脚本,不会影响系统其他设置,推荐优先尝试。

2. 在GitLab Runner的config.toml中配置全局环境变量

如果希望所有CI任务都默认使用UTF-8,可以修改config.toml,给Runner添加编码相关的环境变量:

[[runners]]
  name = "sykora-nb"
  url = "URL"
  token = "TOKEN"
  executor = "shell"
  builds_dir = "C:/GitLab-Runner/builds"
  shell = "powershell"
  # 添加编码环境变量
  environment = ["PSModuleUseConsistentEncoding=true", "OutputEncoding=utf-8"]
[runners.cache]

修改后记得重启GitLab Runner服务,让配置生效。

3. 修改系统区域设置(全局生效,谨慎操作)

如果愿意调整系统级设置,可以让Windows控制台默认使用UTF-8:

  • 打开Windows设置 → 时间和语言 → 语言 → 管理语言设置 → 更改系统区域设置
  • 勾选「Beta版:使用Unicode UTF-8提供全球语言支持」
  • 重启机器

这个方法会影响所有依赖控制台编码的程序,如果你平时还有其他需要用CP852编码的场景,可能会有冲突,所以要谨慎选择。


内容的提问来源于stack exchange,提问作者Ondřej Sýkora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:24:39