Powershell"获取剪贴板"的编码问题



我想通过命令行从剪贴板中检索HTML,并且正在努力获得正确的编码。

例如,如果打开命令提示符/WSL,请复制以下⇧Shift+⭾TAB并运行:

powershell.exe Get-Clipboard

检索到正确的文本(⇧Shift+⭾TAB(。

但是,如果您尝试将剪贴板检索为html:

powershell.exe "Get-Clipboard -TextFormatType html"

检索到以下文本

...⇧Shift+⭾TAB...

这似乎是Get Clipboard commandlet部分的编码混乱。如何解决这个问题?


编辑:正如@Zilog80在评论中所指出的,实际上文本的编码与假设文本的编码不匹配。我可以在Ruby中纠正,例如使用:

out = `powershell.exe Get-Clipboard -TextFormatType html`
puts out.encode('cp1252').force_encoding('utf-8')

你知道如何在命令行上实现同样的效果吗?

这确实是Get-Clipboard的一个缺点。HTML格式被记录为仅支持UTF-8,而不考虑页面的源编码,因此cmdlet应该将其解释为UTF-8,但事实并非如此。

我推测PowerShell在解码数据时将使用的编码,但它可能是系统默认的ANSI编码

[Text.Encoding]::UTF8.GetString([Text.Encoding]::Default.GetBytes( `
(Get-Clipboard -TextFormatType Html -Raw) `
)) 

将对文本进行重新编码,但需要注意的是,如果默认的ANSI编码不能覆盖0-255之间的所有代码点,则可能会丢失一些字符。幸运的是,Windows-1252(最常见的默认设置(确实涵盖了所有代码点。

最新更新