从缓冲区读取显示无法识别的(中文)字符

时间:2014-06-18 15:54:16

标签: c# pinvoke

我在P/Invoke上进行了Ntdll.dll!NtWriteFile,在阅读缓冲区(PVOID)时,我收到了无法识别的字符。我尝试了不同的编码,没有变化。我也在使用来自Rohitab的API Monitor监视进程,所以我看到了正在尝试检索的正确值。有人遇到过这个问题吗?

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 );

输出示例:

  

笍^稌ƭ덾塾塾℀℀℀℀℀℀℀℀

     

萰퓶픊茚缊<縌੾葿缱孪孪孪孪≿≿≿≿≿≿≿≿≿≿

     

缊f縌橿筿筿᱿᱿㽿왿왿笍笍笍稌塾塾塾塾塾塾缊缊缊缊缊缊缊孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪孪靾≿≿   缊f縌橿⹿筿᱿᱿舆ꅿ왿ѿ豿舆舆舆舆ᣢ»

2 个答案:

答案 0 :(得分:0)

当您将ASCII或ANSII编码的文本解释为UTF-16时会发生什么。因此,您需要找出文本编码的真正含义,并相应地进行解释。

因此,无论您使用什么来检查数据都是错误地使用UTF-16。或者,更可能的是,您编写的代码应该是编写UTF-16。

答案 1 :(得分:-1)

我能够使用以下内容对文本进行编码。

Byte[] bytes = Encoding.Unicode.GetBytes(p);
var bUTF8 = Encoding.UTF8.GetString(bytes);