Visual Studio C# 交互式控制台输出错误解释

问题描述 投票:0回答:1

每当我在 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# visual-studio console process.start c#-interactive
1个回答
0
投票

经过我的测试,你需要先初始化这个工具,双击以下内容即可:

enter image description here 然后进入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);
   }
}

这将实现你想要的:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.