Powershell `Get-Clipboard` 的编码问题
Encoding issue with Powershell `Get-Clipboard`
我想通过命令行从剪贴板中检索 HTML 并且正在努力获得正确的编码。
例如,如果您打开命令prompt/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 格式 documented 仅支持 UTF-8,无论页面的源编码如何,因此 cmdlet 应该这样解释它,但事实并非如此。
我推测 PowerShell 在解码数据时将使用的编码,但它可能是系统默认的 ANSI 编码。那样的话
[Text.Encoding]::UTF8.GetString([Text.Encoding]::Default.GetBytes( `
(Get-Clipboard -TextFormatType Html -Raw) `
))
将重新编码文本,但需要注意的是,如果默认 ANSI 编码未涵盖 0-255 的所有代码点,则某些字符可能会丢失。幸运的是 Windows-1252(最常见的默认值)确实涵盖了所有代码点。
我想通过命令行从剪贴板中检索 HTML 并且正在努力获得正确的编码。
例如,如果您打开命令prompt/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 格式 documented 仅支持 UTF-8,无论页面的源编码如何,因此 cmdlet 应该这样解释它,但事实并非如此。
我推测 PowerShell 在解码数据时将使用的编码,但它可能是系统默认的 ANSI 编码。那样的话
[Text.Encoding]::UTF8.GetString([Text.Encoding]::Default.GetBytes( `
(Get-Clipboard -TextFormatType Html -Raw) `
))
将重新编码文本,但需要注意的是,如果默认 ANSI 编码未涵盖 0-255 的所有代码点,则某些字符可能会丢失。幸运的是 Windows-1252(最常见的默认值)确实涵盖了所有代码点。