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

如何让PowerShell Write-* cmdlets中的控制/不可见字符可见?

让PowerShell的Write-* Cmdlets显示控制/不可见字符

要让PowerShell的Write-Warning、Write-Error等Write-* cmdlets显示原本不可见的控制字符,有两种实用方案:

方案一:自定义转换函数,手动替换控制字符

编写一个函数,将常见控制字符替换为可见转义序列,同时兜底处理未覆盖的控制字符:

function Convert-ToVisibleString {
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [string]$InputString
    )

    # 替换常见ASCII控制字符为易读转义符
    $visibleStr = $InputString -replace "`t", '\t' `
                               -replace "`r", '\r' `
                               -replace "`n", '\n' `
                               -replace "`v", '\v' `
                               -replace "`f", '\f' `
                               -replace "`a", '\a' `
                               -replace "`b", '\b'

    # 替换常见Unicode控制字符
    $visibleStr = $visibleStr -replace [char]0x200B, '\u200B' ` # 零宽空格(ZWSP)
                              -replace [char]0x200E, '\u200E' ` # 左到右标记(LRM)
                              -replace [char]0x200F, '\u200F'   # 右到左标记(RLM)

    # 处理剩余ASCII控制字符(0x00-0x1F、0x7F)
    $visibleStr = $visibleStr -replace '[\x00-\x1F\x7F]', { 
        '\x{0:X2}' -f [byte][char]$_.Value 
    }

    # 处理所有Unicode控制字符(类别Cc)
    $visibleStr = $visibleStr -replace '\p{Cc}', {
        $charCode = [int][char]$_.Value
        if ($charCode -le 0xFF) {
            '\x{0:X2}' -f $charCode
        } else {
            '\u{0:X4}' -f $charCode
        }
    }

    return $visibleStr
}

使用示例

# 包含制表符、换行符和零宽空格的测试文本
$cellValue = "`t用户姓名`n$([char]0x200B)张三"
Write-Warning ("单元格值: [{0}]" -f (Convert-ToVisibleString $cellValue))

输出效果:

WARNING: 单元格值: [\t用户姓名\n\u200B张三]

方案二:借助ConvertTo-Json自动转义

利用PowerShell的ConvertTo-Json cmdlet自动将所有控制字符转成JSON标准的转义序列,无需手动维护替换规则:

$cellValue = "`t测试文本$([char]0x200B)包含零宽空格"
# 转换为JSON后去掉首尾引号
$encodedValue = (ConvertTo-Json $cellValue) -replace '^"|"$', ''
Write-Warning ("单元格值: [{0}]" -f $encodedValue)

输出效果:

WARNING: 单元格值: [\t测试文本\u200B包含零宽空格]

方案对比

  • 自定义函数:灵活性高,可根据需求调整转义符的显示格式(比如把t显示为`),适合需要定制输出的场景。
  • ConvertTo-Json:无需手动配置,自动覆盖所有JSON支持的转义字符,包括各类Unicode控制字符,省心高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:53:15