我在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縌橿筿᱿᱿舆ꅿ왿ѿ豿舆舆舆舆ᣢ»
答案 0 :(得分:0)
当您将ASCII或ANSII编码的文本解释为UTF-16时会发生什么。因此,您需要找出文本编码的真正含义,并相应地进行解释。
因此,无论您使用什么来检查数据都是错误地使用UTF-16。或者,更可能的是,您编写的代码应该是编写UTF-16。
答案 1 :(得分:-1)
我能够使用以下内容对文本进行编码。
Byte[] bytes = Encoding.Unicode.GetBytes(p);
var bUTF8 = Encoding.UTF8.GetString(bytes);