PowerShell中如何用Unicode字符批量替换文件中的字符串
在PowerShell中批量替换文件字符串为Unicode国旗字符
问题背景
我需要在PowerShell里批量替换文件中的国家名称为对应的Unicode国旗字符,比如把"Ireland"换成🇮🇪(U+1F1EE U+1F1EA),"UK"换成🇬🇧(U+1F1EC U+1F1E7)。我已经掌握普通字符串替换的写法,但不清楚如何用Unicode字符完成替换。
原有替换代码示例:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'} $fileContent = Get-Content "D:\PS\comp.txt" $updatedContent = $fileContent -replace 'EU','EU-01' -replace 'AP','AP-01' $updatedContent | Set-Content "D:\PS\comp.txt"
需要修改的目标替换逻辑:
$updatedContent = $fileContent -replace 'Ireland','IE' -replace 'UK','GB'
要将上述代码中的"IE""GB"替换为对应的Unicode国旗字符。
解决方案
在PowerShell中可以通过两种方式使用Unicode国旗字符完成替换,以下是具体实现:
方式1:直接使用国旗字符字面量
直接将国旗字符(如🇮🇪、🇬🇧)写入替换字符串位置即可,注意脚本文件需保存为UTF-8编码避免字符乱码:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'} # 使用-Raw参数读取整个文件,保留原有换行格式 $fileContent = Get-Content "D:\PS\comp.txt" -Raw $updatedContent = $fileContent -replace 'Ireland','🇮🇪' -replace 'UK','🇬🇧' # 写入时指定UTF-8编码,确保Unicode字符正确保存 $updatedContent | Set-Content "D:\PS\comp.txt" -Encoding utf8
方式2:使用Unicode转义序列
如果不方便直接输入国旗字符,可通过PowerShell的Unicode转义语法定义字符:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'} $fileContent = Get-Content "D:\PS\comp.txt" -Raw # 用`u{XXXX}`转义序列定义国旗字符 $irelandFlag = "`u{1F1EE}`u{1F1EA}" # 对应🇮🇪 $ukFlag = "`u{1F1EC}`u{1F1E7}" # 对应🇬🇧 $updatedContent = $fileContent -replace 'Ireland',$irelandFlag -replace 'UK',$ukFlag $updatedContent | Set-Content "D:\PS\comp.txt" -Encoding utf8
关键注意事项
- 编码必须为UTF-8:无论读取还是写入文件,都要确保使用UTF-8编码,否则Unicode国旗字符会出现乱码。
- 使用-Raw参数:默认
Get-Content按行读取文件,拼接时可能改变原有换行格式,-Raw参数可一次性读取整个文件,避免此类问题。
内容的提问来源于stack exchange,提问作者dmac
相关产品推荐
相关产品推荐

