每当我在 Visual Studio 的 C# 交互窗口中使用
Process.Start
并执行向控制台输出信息的外部命令时,它都会打印为看似汉字的字符。
我尝试在网上搜索类似的问题(但没有找到)。我希望它能够打印控制台输出,就像在控制台中打印一样(因此使用普通字母,而不是看起来像中文的字符)。
我尝试在 C# 交互窗口中使用
Process.Start("ping")
,结果导致文本显示错误。
如果我在普通的 C# 程序中使用相同的代码,它可以在单独打开的 Windows 控制台中很好地显示输出。
当我使用时:
Process.Start("ping");
输出为:
祓瑮硡›楰杮嬠琭⁝ⵛ嵡嬠渭挠畯瑮⁝ⵛ楳敺⁝ⵛ嵦嬠椭吠䱔⁝ⵛ⁶佔嵓††††††嬠爭挠畯瑮⁝ⵛ潣湵嵴嬠ⵛ潨瑳氭獩嵴簠嬠欭栠獯楬瑳嵝††††††嬠眭琠浩潥瑵⁝ⵛ嵒嬠匭猠捲摡牤⁝ⵛ潣灭牡浴湥嵴嬠瀭൝ ††††††ⵛ崴嬠㘭⁝楚汥慮敭灏楴湯湥ഺ †ⴠ⁴††††††楐杮⁴敤湡敧敧敢敮潈瑳戠獩稠牵䈠敥摮杩湵敤潖杲湡獧മ †††††††††牄掁敫楓呓䝒唫呎剂浵搠敩匠慴楴瑳歩愠穮穵楥敧湵 †††††††††敤潖杲湡潦瑲畺敳穴湥മ †††††††††牄掁敫楓呓䝒䌫浵搠湥嘠牯慧杮愠穢扵敲档湥മ †ⴠ††††††鑌瑳䄠牤獥敳畺䠠獯湴浡湥愠晵മ †ⴠ潣湵⁴†††楄湁慺汨搠牥稠⁵敳摮湥敤捅潨湡潦摲牥湵敧††氭猠穩†††䐠敩䜠鑲旡搠獥匠湥敤異晦牥††昭††††††䰠来⁴慤敋湮敺捩敨腦丢捩瑨映慲浧湥楴牥湥•浩倠歡瑥†††††††††映獥⁴渨牵䤠癐⤴മ †ⴠ呔⁌††††楄敌敢獮慤敵††瘭吠协††††䐠牥䐠敩獮瑴灹⠠畮偉㑶楄獥楅獮整汬湵獩⁴敶慲瑬瑥†††††††††甠摮栠瑡欠楥敮䄠獵楷歲湵敧畡慤楄湥瑳祴晰汥浩䤠ⵐ†††††††††䠠慥敤⥲മ †ⴠ潣湵⁴†††慄整獮瑡牺畯整映犁䄠穮桡潶潈獰⠠畮偉㑶⸩††猭挠畯瑮†††娠楥獴整灭汥映犁䄠穮桡潶潈獰⠠畮偉㑶⸩††樭栠獯楬瑳†∠潌獯潓牵散删畯整•敧葭⃡潈瑳楬瑳渨牵䤠癐⤴മ †ⴠ潨瑳氭獩⁴†匢牴捩⁴潓牵散删畯整•敧葭⃡潈瑳楬瑳渨牵䤠癐⤴മ †ⴠ⁷楴敭畯⁴††敚瑩楬業⁴湩䴠汩楬敳畫摮湥映犁搠敩攠湩敺湬湥䄠瑮潷瑲湥മ †ⴠ⁒††††††敖睲湥敤⁴敤潒瑵湩桧慥敤Ⱳ甠畡档搠敩甠杭步桥瑲潒瑵 †††††††††畺琠獥整渨牵䤠癐⤶മ †††††††††楄獥牥删畯楴杮敨摡牥眠物楮档⁴敭牨瘠牥敷摮瑥†††††††††⠠楳桥䙒⁃〵㔹⸩䈠楥洠湡档湥匠獹整敭敷摲湥†††††††††䔠档慯普牯敤畲杮湥瘠牥潷晲湥敷湮†††††††††搠敩敳效摡牥瘠牥敷摮瑥眠物††匭猠捲摡牤††䐠敩稠⁵敶睲湥敤摮畑汥慬牤獥敳മ †ⴠ潣灭牡浴湥⁴潒瑵湩摧灥瑯敢敺捩湨牥††瀭††††††倠湩瑧搠敩䄠牤獥敳攠湩獥䄠扮敩整獲映犁搠敩†††††††††䠠灹牥嘭中瑥睺牥癫物畴污獩敩畲杮മ †ⴠ‴††††††牅睺湩瑧搠敩嘠牥敷摮湵潶偉㑶മ †ⴠ‶††††††牅睺湩瑧搠敩嘠牥敷摮湵潶偉㙶മഊ
应该是(如果您在控制台中运行
ping
):
Syntax: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
[-4] [-6] Zielname
Optionen:
-t Pingt den angegebenen Host bis zur Beendigung des Vorgangs.
Drücken Sie STRG+UNTBR, um die Statistik anzuzeigen und
den Vorgang fortzusetzen.
Drücken Sie STRG+C, um den Vorgang abzubrechen.
-a Löst Adressen zu Hostnamen auf.
-n count Die Anzahl der zu sendenden Echoanforderungen.
-l size Die Größe des Sendepuffers.
-f Legt das Kennzeichen für "Nicht fragmentieren" im Paket
fest (nur IPv4).
-i TTL Die Lebensdauer.
-v TOS Der Diensttyp (nur IPv4. Diese Einstellung ist veraltet
und hat keine Auswirkungen auf das Diensttypfeld im IP-
Header).
-r count Datensatzroute für Anzahl von Hops (nur IPv4).
-s count Zeitstempel für Anzahl von Hops (nur IPv4).
-j host-list "Loose Source Route" gemäß Hostliste (nur IPv4).
-k host-list "Strict Source Route" gemäß Hostliste (nur IPv4).
-w timeout Zeitlimit in Millisekunden für die einzelnen Antworten.
-R Verwendet den Routingheader, um auch die umgekehrte Route
zu testen (nur IPv6).
Dieser Routingheader wird nicht mehr verwendet
(siehe RFC 5095). Bei manchen Systemen werden
Echoanforderungen verworfen, wenn
dieser Header verwendet wird.
-S srcaddr Die zu verwendende Quelladresse.
-c compartment Routingdepotbezeichner
-p Pingt die Adresse eines Anbieters für die
Hyper-V-Netzwerkvirtualisierung.
-4 Erzwingt die Verwendung von IPv4.
-6 Erzwingt die Verwendung von IPv6.
经过我的测试,你需要先初始化这个工具,双击以下内容即可:
然后进入C#交互窗口。直接使用Process.Start("ping")命令是错误的。您需要在 C# 交互窗口中使用以下代码:
var startInfo = new ProcessStartInfo
{
FileName = "ping",
Arguments = "",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
};
using (var process = Process.Start(startInfo))
{
using (var reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
Console.WriteLine(result);
}
}
这将实现你想要的: