Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从缓冲区读取显示无法识别的(中文)字符_C#_Pinvoke - Fatal编程技术网

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