我有 2 个 Windows 应用程序,我想在其中测试 Unicode 字符的读写。我知道其他 IPC 可能性,但我想了解为什么这个特殊情况不起作用。
这是readinput.cpp:
int wmain()
{
std::wstring temp;
std::getline(std::wcin, temp);
uint8_t * p = (uint8_t*)temp.data();
return 0;
}
这是 writeoutput.cs:
static void Main(string[] args)
{
var process = new Process();
process.StartInfo.FileName = "C:\\...\\readinput.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.Start()
process.StandardInput.WriteLine("Hello from \u03A6\u0429\u3427");
process.WaitForExit();
}
我认为 C# 应用程序正确写入我的读者的输入流。但是,C++ 应用程序不会显示正确的输入,请参见图片。无论我使用 std::cin 还是 std::wcin,这都是一样的。
不知道为什么它被标记为 UTF-8。
temp[12]
显然不是 UTF-8(U+0080 以上的所有字符都使用多字节编码)并且 Windows 本机使用 UTF-16,其中 232 (0xEB) 是 U+00EB 的正确编码 é
这只是 C 强制转换告诉编译器关闭的另一种情况,隐藏了明智的编译器错误消息。