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

如何将哈希表中的西里尔文转换为UTF-16转义序列(PowerShell实现)

解决西里尔文转UTF-16转义序列的PowerShell方案

没问题,我来帮你搞定这个需求!默认情况下PowerShell的ConvertTo-Json会直接保留非ASCII字符(比如西里尔文),但我们可以通过手动处理每个字符来生成你需要的\uXXXX格式转义序列。

完整修改后的代码

clear-host

# 定义一个辅助函数,将字符串转换为UTF-16转义序列格式
function Convert-ToUtf16Escape {
    param([string]$InputString)
    $escapedChars = @()
    foreach ($char in $InputString.ToCharArray()) {
        $charCode = [int]$char
        # 对于ASCII可打印字符直接保留,其他字符转成\uXXXX格式
        if ($charCode -ge 0x20 -and $charCode -le 0x7F) {
            $escapedChars += $char.ToString()
        } else {
            $escapedChars += '\u{0:x4}' -f $charCode
        }
    }
    return $escapedChars -join ''
}

$temp = @() # 先初始化数组,避免意外问题
foreach ($line in (Get-Content C:\Users\users\Downloads\cyrillic.txt)){
    $nline = $line.Split(' ', 2)
    $properties = @{
        'id'    = $nline[0]
        'value' = Convert-ToUtf16Escape $nline[1] # 调用转换函数处理西里尔文
    }
    $temp += New-Object PSObject -Property $properties
}

# 转换为JSON后,需要修正转义符:ConvertTo-Json会把\转成\\,所以要替换回来
$jsonOutput = $temp | ConvertTo-Json
$jsonOutput = $jsonOutput -replace '\\\\u', '\u'

# 输出到文件,指定UTF8编码避免乱码
$jsonOutput | Out-File "C:\Users\user\Downloads\data.json" -Encoding utf8

关键步骤说明

  1. 辅助函数Convert-ToUtf16Escape:遍历字符串的每个字符,将非ASCII字符转换为\u开头的4位十六进制转义序列,ASCII可打印字符直接保留。
  2. 处理JSON转义问题:当我们手动生成\uXXXX后,ConvertTo-Json会自动把反斜杠转义为\\,所以最后需要用-replace '\\\\u', '\u'把转义后的反斜杠改回来,确保输出的JSON格式正确。
  3. 初始化数组:原来的代码里$temp没有提前初始化,加上$temp = @()可以避免潜在的类型问题。

预期输出

运行后你的data.json会变成:

[
    {
        "id": "1",
        "value": "\u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:12:43