C# 从缓冲区读取显示无法识别的(中文)字符
我正在C# 从缓冲区读取显示无法识别的(中文)字符,c#,pinvoke,C#,Pinvoke,我正在Ntdll.dll上执行p/Invoke!NtWriteFile读取缓冲区(PVOID),我得到了无法识别的字符。我尝试了不同的编码,没有改变。我还使用API Monitor从Rohitab监视流程,因此我看到了我试图检索的正确值。有人碰到过这个问题吗 NtWriteFile( IN HANDLE FileHandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN P
Ntdll.dll上执行p/Invoke
!NtWriteFile
读取缓冲区(PVOID)
,我得到了无法识别的字符。我尝试了不同的编码,没有改变。我还使用API Monitor从Rohitab
监视流程,因此我看到了我试图检索的正确值。有人碰到过这个问题吗
NtWriteFile(
IN HANDLE FileHandle,
IN HANDLE Event OPTIONAL,
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
IN PVOID ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PVOID Buffer,
IN ULONG Length,
IN PLARGE_INTEGER ByteOffset OPTIONAL,
IN PULONG Key OPTIONAL );
输出示例:
笍^稌ƭ덾塾畿浽ꭼɿݾ浼굺ꥻꥻ Āጀ‘℀
萰퓶픊茚 缊 当您将ASCII或ANSII编码的文本当作UTF-16来解释时,就会发生这种情况。因此,您需要找出文本编码的真正含义,并对其进行相应的解释
因此,无论您使用什么来检查数据,都可能是错误地使用了UTF-16。或者,更可能的情况是,您编写的代码应该编写UTF-16 我能够使用下面的代码对文本进行编码
Byte[] bytes = Encoding.Unicode.GetBytes(p);
var bUTF8 = Encoding.UTF8.GetString(bytes);
是否可能是某种中文错误信息?我把它放到了Bing translate中,它提到了“卸载”和“计算机服务”,尽管它仍然很混乱。与其看字符,不如看字节,你能发布其中的一些吗?请你解释一下这是如何回答你提出的问题的?问题中没有C#字符串p。没有任何地方提到UTF8。你答案中的密码一定是错的。很明显,您已将8位文本放入C#字符串中,并将其解释为UTF-16。这里的代码是一种愚蠢和虚假的方法来避免这个错误。将原始字节解码为8位,一切都会好起来。但看起来你并不是在试图学习。你在这里展示的代码似乎有助于确认我答案中的第一句话。将原始字节数组传递给
Encoding.UTF8.GetString()
或Encoding.Ansi.GetString()
或使用的任何8位编码。不要将8位字节数组直接放入p
。