Board logo

标题: [原创教程] 用 PowerShell 输出中文到剪贴板 [打印本页]

作者: victorwoo    时间: 2014-7-21 11:14     标题: 用 PowerShell 输出中文到剪贴板

本帖最后由 victorwoo 于 2014-7-21 16:57 编辑

原始链接:用 PowerShell 输出中文到剪贴板
发表日期:2014-07-22


# 方法一 通过 clip.exe

用 PowerShell 将字符串输出到剪贴板的最简单方式是:
  1. 'abc' | clip.exe
复制代码
不过直接这么使用的话,如果待输出的字符串是包含中文的,那么剪贴板里的内容会出现“乱码”:
  1. 'abc中文def' | clip.exe
复制代码
剪贴板里的内容变成:
  1. abc??def
复制代码
这是因为为了兼容旧程序,管道操作缺省将字符串采用 ASCII 编码,因此对于中文字符,被转换成了“??”。解决方案如下:
  1. $OutputEncoding = [Console]::OutputEncoding
  2. 'abc中文def' | clip.exe
复制代码
# 方法二 通过 WPF 方法

以 `-sta` 参数启动 PowerShell 后,执行以下代码:
  1. Add-Type -Assembly PresentationCore
  2. [Windows.Clipboard]::SetText('abc中文def')
复制代码
PowerShell 2.0 的控制台,缺省设置是 MTA;PowerShell 3.0 的控制台,缺省设置是 STA。

关于 `-sta` 的知识,请参见PowerShell中的 STA和MTA

参考材料:
- $OutputEncoding to the rescue
- Powershell能否将文件列表写入剪切板
- PowerShell中的 STA和MTA
- PowerShell.exe Command-Line Help
- QQ 群 *PowerShell技术交流(271143343) 2014-07-01 的讨论
作者: CrLf    时间: 2014-7-21 17:46

$OutputEncoding = [Console]::OutputEncoding

原来如此,点赞!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2