[英]How to set Select-String encoding to UTF-16?
我有一個 PowerShell 腳本。 它執行生成 UTF-16 output 的 exe 文件,我將其通過管道傳輸到 Select-String 中,如下所示:
& "my.exe" | Select-String -Pattern "skipping non-regular file" -NotMatch -Encoding "utf-16"
但是 PowerShell 報告說,編碼不受支持。
有解決方法來解決這個問題嗎? 真的不支持 UTF-16 嗎?
這是我想出的一個例子。 我不知道如何使它工作。
程序.cs:
using System;
using System.Text;
namespace myApp
{
class Program
{
static void Main(string[] args)
{
Byte[] byteOrderMark;
byteOrderMark = Encoding.Unicode.GetPreamble();
//Console.OutputEncoding = new UnicodeEncoding(false, true);
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine("Hello World!");
}
}
}
$env:path += ';C:\Windows\Microsoft.NET\Framework64\v4.0.30319'
csc Program.cs
# no output for either
.\Program | select-string Hello
.\Program | select-string Hello -encoding unicode
# no 'FF FE' BOM
.\program | Format-Hex
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 H.e.l.l.o. .W.o.
00000010 72 00 6C 00 64 00 21 00 r.l.d.!.
Select-String
的-Encoding
參數不從管道適用於字符串輸入,如同從一個外部程序輸出的情況。
相反,它僅適用於文件輸入- 即通過管道作為Get-ChildItem
/ Get-Item
調用的輸出或通過-Path
/ -LiteralPath
參數傳遞的文件內容。 -Encoding
通常僅適用於所有標准 cmdlet 的文件內容。
-Encoding
:正如Jeroen Mostert 所指出的,您看到的錯誤消息源於utf-16
不是Windows PowerShell 中有效的-Encoding
參數; (不幸的是),您必須使用誤稱Unicode
來指代 UTF-16LE。
Get-Help Select-String -Parameter Encoding
查看支持的名稱或查閱在線文檔。utf-16
和utf-16le
PowerShell中的(核心)7+,在哪里工作-Encoding
還接受任何的名稱或代碼頁的數量從所有可用的.NET編碼中,像報道[System.Text.Encoding]::GetEncodings()
。 相反,您必須(暫時)將[Console]::OutputEncoding
為 UTF-16LE(“Unicode”),以使 PowerShell 正確解碼來自外部程序的 UTF-16LE 輸出。
$prev = [Console]::OutputEncoding # Save current value.
# Tell PowerShell to interpret external-program output as
# UTF-16LE ("Unicode") encoded.
[Console]::OutputEncoding = [System.Text.Encoding]::Unicode
& "my.exe" |
Select-String -Pattern "skipping non-regular file" -NotMatch
[Console]::OutputEncoding = $prev # Restore previous value.
也可以看看:
Invoke-WithEncoding
和Debug-NativeInOutput
通信時如何處理字符編碼的更多信息,請參閱此答案。PowerShell 可以搜索字符串。 搜索適用於 ASCII 和 UTF-16 日志文件。
搜索當前目錄下的any.log文件:
get-content "*.log" | Select-String -Pattern "Configuration completed successfully."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.