powershell里无法输出emoji怎么解决?

玥 张 0 信誉分
2025-11-15T06:35:49.6033333+00:00

我自己写了一个powershell命令行脚本用于输出目录,但是powershell似乎不支持输出emoji,有什么解决方案吗?

这是我的命令脚本:

# 设置输出编码
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# 参数
param(
    [string]$Path,
    [int]$Depth,
    [switch]$IconMode
)

if (-not $Path) { $Path = "." }
if (-not $Depth) { $Depth = 1 }  # 与 tree -L 默认行为一致

function Get-Icon {
    param ([IO.FileSystemInfo]$Item)

    if ($Item.PSIsContainer) { return "📁" }

    $ext = $Item.Extension.ToLower()

    switch ($ext) {
        ".txt" { "📄" }
        ".md" { "📄" }
        ".json" { "📄" }
        ".xml" { "📄" }

        ".exe" { "🧱" }
        ".dll" { "🧱" }
        ".bin" { "🧱" }

        ".mp3" { "🎵" }
        ".wav" { "🎵" }

        ".mp4" { "🎬" }
        ".mov" { "🎬" }
        ".avi" { "🎬" }

        ".jpg" { "🖼" }
        ".jpeg" { "🖼" }
        ".png" { "🖼" }
        ".gif" { "🖼" }

        ".zip" { "📦" }
        ".rar" { "📦" }
        ".7z" { "📦" }

        ".pdf" { "📚" }
        ".doc" { "📚" }
        ".docx" { "📚" }

        default { "📄" }
    }
}

function Print-Tree {
    param (
        [string]$Dir,
        [string]$Prefix = "",
        [int]$Level = 1   # 注意:从 1 开始,表示第一层内容(与 tree 一致)
    )

    # tree -L 1:只显示第一层内容,不进入第二层
    if ($Level -gt $Depth) { return }

    $items = Get-ChildItem $Dir

    for ($i=0; $i -lt $items.Count; $i++) {
        $item = $items[$i]
        $isLast = ($i -eq $items.Count - 1)

        $symbol = if ($isLast) { "└── " } else { "├── " }

        if ($IconMode) {
            $icon = Get-Icon -Item $item
            Write-Output "$Prefix$symbol$icon $($item.Name)"
        }
        else {
            Write-Output "$Prefix$symbol$($item.Name)"
        }

        # 递归:只有目录才继续展示下一层
        if ($item.PSIsContainer) {
            $childPrefix = if ($isLast) { "$Prefix    " } else { "$Prefix│   " }
            Print-Tree -Dir $item.FullName -Prefix $childPrefix -Level ($Level + 1)
        }
    }
}

# 输出根目录名(与 tree 命令一致)
Write-Output (Resolve-Path $Path)

# 执行
Print-Tree -Dir (Resolve-Path $Path)

但是输出就没有:

用户的图像

开发人员技术 | Windows 窗体
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Canyu Liu 155 信誉分 学生大使
    2025-11-15T12:58:48.78+00:00

    嗨!

    别担心,PowerShell 完全可以支持 emoji 输出,让我们一步步排查问题。

    首先解决您脚本中的 param 错误,将其移动到脚本的最上方。PowerShell 要求 param 必须在脚本的开头,不可以在其他位置。

    屏幕截图 2025-11-15 204918 像这样,param 的错误就不会再出现了。

    如果输出时目录树乱码,或者 emoji 依旧无法显示,可以尝试将脚本保存为 UTF-8 with BOM 格式。

    用户的图像

    测试输出,看起来一起正常。用户的图像

    希望能够帮到您。

    0 个注释 无注释

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。