【发布时间】:2020-09-25 11:24:40
【问题描述】:
我CreateProcess 一个子应用程序。执行后,我可以从附加到子进程外的管道中读取。我有一些代码可以阅读:
char chBuf[BUFSIZE];
DWORD dwRead;
ReadFile( g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL);
Ofc 这是没有任何安全检查等的简单代码。只有我的问题。当我阅读时,有些字符是正常的,就像普通的 ANSI 字符一样,但是当读取一些区域字符时,我认为这个字符是多字节的。请看屏幕。
如何将这种 ASCII 和 UNICODE 字符数组的混合转换为 WIN1250 中的字符数组,或者像 wchar_t[] 这样的 unicode 字符数组?
【问题讨论】:
-
这看起来像 UTF-8,而不是“ASCII 和 Unicode 的混合体”。
-
您将 bytes 推入管道,它们代表的内容取决于您。在这种情况下,它似乎是一个 utf8 编码的字符串。这很好,很常见的编码,但不要让它意外地好。它是 UNICODE,而不是 ASCII。如有必要,使用 MultibyteToWideChar() 和 CP_UTF8 进行转换。
-
如何在 C++ Builder 中轻松地将这个数组转换为一些 UnicodeString?
-
@lgabryel 在 C++Builder 2009+ 中,将字节放入
UTF8String并将其分配给UnicodeString,RTL 将为您转换数据。在早期版本中,将字节放入AnsiString,将其传递给UTF8Decode(),并将结果分配给WideString。
标签: c++ unicode pipe ascii readfile