PowerShell:Out-Printer,Unicode和字体大小

3
powershell "get-content foo.txt|Out-Printer"

只要 foo.txt 是英文,就没问题(大多数情况下)。
如果 foo.txt 包含 Unicode 字符,例如 राष्ट्र,则打印的内容将变成类似于 °à¥€ ब 的东西。
我尝试使用 -Encoding 选项传递 get-content,但结果并没有改变。
第一个问题是:是否可能在不启动 Word/IE 等后台程序的情况下确保 Unicode 文本被正确打印?
我的第二个问题是:
是否可以控制 out-printer 使用哪种字体(类型和大小)进行打印?

我认为这取决于打印机。默认配置可能仅支持ASCII或某些扩展的拉丁字符集。许多打印机可以使用自定义语言进行控制;惠普有PCL,京瓷有Prescribe,许多高端设备支持PostScript。因此,为了打印Unicode,特殊的控制序列可能是解决方案。 - vonPryz
Opt-Printer应该无缝地写入任何连接的打印机。 如果我必须开始添加逻辑来确定打印机类型以及它支持哪种语言,然后在我的文本文件中注入打印机特定的魔术代码,那么这将完全违背out-printer的初衷。问题是,我可以执行“notepad /p foo.txt”并正确地打印出Unicode代码字符...所以微软至少有一个团队知道如何正确地将文本发送到打印机:( - vijayvithal
1
  1. 当使用带有-Encoding参数的Get-Content(不带Out-Printer)时,显示是否正确显示字符?打印输出只是“排队”,因此如果显示出现乱码,则会打印相同的内容。
  2. 打印机默认支持非ASCII字符打印吗?
- Raven Knit
Powershell 5的get-content命令不会识别UTF8无BOM格式,除非使用-encoding参数。 - js2010
1个回答

0
在我的环境中(Windows 10 2004 Build 19041.985,日本语言环境),我使用以下情况得到了正确的结果:
  • 以 UTF-8 带 BOM 的格式保存 .txt 文件,并使用 Get-Content .\foo.txt | Out-Printer 打印
  • 以 UTF-8 无 BOM 的格式保存 .txt 文件,并使用 Get-Content .\foo.txt -Encoding UTF8 | Out-Printer 打印

enter image description here

我在以下情况下得到了错误的结果(例如爨ー爨セ爨キ爭財、游・財、ー):

  • .txt文件以UTF-8无BOM格式保存,并使用Get-Content .\foo.txt | Out-Printer打印。

enter image description here

看起來像是編碼問題,請先檢查@RavenKnit所說的。

是否有可能確保Unicode文本正常打印,而不必啟動Word / IE等背景程序進行打印?

我找不到使用Get-PrinterPortGet-WmiObject Win32_Printerprnmngr.vbsprnqctl.vbs的方式。如果你只是不想在打印文件內容時顯示Windows,可以使用Print動詞。它會運行notepad.exe以列印.txt文件,運行winword.exe以列印.docx文件,等等。

Start-Process .\foo.txt -Verb Print -WindowStyle Hidden -Wait

能否控制打印机输出时使用的字体(类型和大小)?
根据Out-Printer,默认字体嵌入在.resx文件中。因此看起来您无法控制默认字体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接