我想通过命令行从剪贴板中检索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(最常见的默认设置(确实涵盖了所有代码点。