如何将哈希表中的西里尔文转换为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
关键步骤说明
- 辅助函数
Convert-ToUtf16Escape:遍历字符串的每个字符,将非ASCII字符转换为\u开头的4位十六进制转义序列,ASCII可打印字符直接保留。 - 处理JSON转义问题:当我们手动生成
\uXXXX后,ConvertTo-Json会自动把反斜杠转义为\\,所以最后需要用-replace '\\\\u', '\u'把转义后的反斜杠改回来,确保输出的JSON格式正确。 - 初始化数组:原来的代码里
$temp没有提前初始化,加上$temp = @()可以避免潜在的类型问题。
预期输出
运行后你的data.json会变成:
[ { "id": "1", "value": "\u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430" } ]
内容的提问来源于stack exchange,提问作者0 4
相关产品推荐
相关产品推荐

