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

本文关键字:中文 字符 识别 缓冲区 读取 显示 | 更新日期: 2023-09-27 18:09:06

我正在做Ntdll.dll!NtWriteFile上的P/Invoke,同时读取缓冲区(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縌ϲ橿⹿筿偿᱿㽿ꅿ왿ѿ豿豿笍^稌ƭ덾塾畿浽ꭼɿݾ浼굺ꥻꥻ缊& lt;縌੾葿繾륿뙾孿퍿Ϳ큾靾≿≿缊f縌橿⹿筿᱿㽿ꅿ왿豿豿缷ⴀᣢ

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

当您将ASCII或ansi编码的文本解释为UTF-16时就会发生这种情况。因此,您需要找出文本编码的真正含义,并对其进行相应的解释。

所以不管你用什么来检查数据,都可能错误地使用了UTF-16。或者,更可能的情况是,您编写的代码应该编写UTF-16。

我可以使用下面的代码对文本进行编码。

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