通过 Windows 批处理文件将字符串替换为文本文件中的 unicode

Posted

技术标签:

【中文标题】通过 Windows 批处理文件将字符串替换为文本文件中的 unicode【英文标题】:Replace string with unicode in text file via Windows batch file 【发布时间】: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)。 【参考方案1】:

我认为 .bat 文件不能有非 ascii 编码。如果你愿意有一个 file.ps1 文件:

(gc test.txt) -replace ':car:', '?' | Out-File -encoding utf8 test-out.txt

文件必须在记事本中保存为带有bom的utf8,而不仅仅是utf8。

那么您的 .bat 文件将是:

powershell -file file.ps1

powershell ise 是一个很好的测试方法。

cmd /c file.bat
type test-out.txt

?

【讨论】:

这也很有帮助!感谢发帖。【参考方案2】:

Windows .bat 脚本解释器不理解任何 Unicode 编码(例如 utf-8utf-16utf-16);最简单的原则是:

You have to save the batch file with OEM encoding. How to do this varies depending on your text editor. The encoding used in that case varies as well. For Western cultures it's usually CP850.

要使用任何 Unicode 字符(ASCII 范围以上)作为传递给 PowerShell 命令的字符串的一部分,然后(而不是 '?')应用 .NET method Char.ConvertFromUtf32(Int32);就 PowerShell 语法而言[char]::ConvertFromUtf32(0x1F697)

在 ASCII 中,它与上面的 .bat 编码规则不矛盾,PowerShell 会将其评估为 ? 字符...

那么,你的行可能如下:

powershell -Command "(gc test.txt) -replace ':car:', [char]::ConvertFromUtf32(0x1F697) | Out-File -encoding Unicode test.txt"

【讨论】:

以上是关于通过 Windows 批处理文件将字符串替换为文本文件中的 unicode的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]

使用 VBScripts 将文本文件 unix 行结尾替换为 Windows [重复]

Windows CLI:将列表通过管道传输到 awk 并用外部文件中的文本替换文本并写入 output.txt

如何使用 Windows 命令行环境查找和替换文件中的文本?

如何使用Windows命令行环境查找和替换文件中的文本?

python读取文本文件,如何将每行最后一个特定字符替换?