【发布时间】:2021-07-05 14:24:25
【问题描述】:
我有一个包含以下简单内容的文件:
test.txt(ASCII 编码)
Baby, you can drive my :car:
通过 Windows 批处理文件,我需要将 :car: 更改为 ???? (https://unicode-table.com/en/1F697/)
我想避免在客户端的服务器上安装新软件,所以我尝试使用 PowerShell 或本机软件来完成。
到目前为止,我已经尝试了很多建议 (https://www.generacodice.com/en/articolo/30745/How-can-you-find-and-replace-text-in-a-file-using-the-Windows-command-line-environment?),但对我没有任何帮助。要么它没有被替换,要么 \u1F697 从字面上显示。我已经尝试将入站文件的编码更改为 Unicode,但这也不起作用。
非工作示例:
powershell -Command "(gc test.txt) -replace ':car:', '????' | Out-File -encoding Unicode test.txt"
有人有什么建议吗?
编辑:我已经确定了如何复制它。
如果我通过命令行运行此行,它可以工作:
powershell -Command "(gc test.txt) -replace ':car:', '????' | Out-File -encoding utf8 test-out.txt"
如果我将同一行代码放入replace.bat 中然后执行它,test-out.txt 已损坏。
批处理文件设置为 UTF-8 编码。应该有所不同吗?
【问题讨论】:
-
“要么它没有被替换,要么 \u1F697 出现字面意思” - 它是哪一个,以“不工作”的例子?
-
我重新测试了代码以回答您的问题,并且神奇地在我的笔记本电脑上运行。
:car:被替换为汽车表情符号。但是在客户端的服务器上,同样的命令将客户端的文件替换为ƒÜù。 -
我认为
ƒÜù是由于解释器读取文件的编码与文件实际不同 -
这是一个很好的选择。我得看看他们正在使用什么以及编码似乎是什么。
-
-replace ':car:', [char]::ConvertFromUtf32(0x1F697)(因为 Windows.bat脚本解释器既不理解utf-8也不理解utf-16)。
标签: windows powershell unicode find-replace