C#调用PowerShell指令得到的返回值中,有时会出现无法显示的字符,比如:
Get-Tpm指令,返回:
TpmPresent : True
TpmReady : True
TpmEnabled : True
TpmActivated : True
TpmOwned : True
RestartPending : True
ManufacturerId : 1229870147
ManufacturerIdTxt : INTC
ManufacturerVersion : 403.1.0.0???????????????????????
ManufacturerVersionFull20 : 403.1.0.0???????????????????????????????????????????????????????????????????????????????????
????????
ManagedAuthLevel : Full
OwnerAuth :
OwnerClearDisabled : False
AutoProvisioning : Enabled
LockedOut : False
LockoutHealTime : 10 minutes
LockoutCount : 0
LockoutMax : 31
SelfTest : {}
长串的问号就是无法显示的字符。
这会导致在WinForm界面上显示不全。比如把这段内容显示在RichTextBox上,前面部分正常,遇到奇怪字符就停止显示了。
把字符串转成byte数组打印出来,发现奇怪的byte是0.
byte[] bytes = Encoding.Default.GetBytes(s);
foreach (byte b in bytes)
{
Console.Write(b.ToString("X") + " ");
}
查了一下ASCII表,发现0x00是NUL:
尝试在byte数组中把0x00换成其他的,比如01,02,08,字符串都可以正常显示:
目前的结论就是只要把0x00拿掉就能解决这个字符串显示不全的问题。
List<byte> newBytes = new List<byte>();
byte[] bytes = Encoding.Default.GetBytes(s);
foreach (byte b in bytes)
{
if (b == 0x00) { continue; }
newBytes.Add(b);
}
return Encoding.Default.GetString(newBytes.ToArray());
全部正常显示了:
问题解决。