在控制台/InputStream中正确读取unicode字符

问题描述 投票:0回答:1

我有 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,这都是一样的。

c++ unicode utf-8
1个回答
0
投票

不知道为什么它被标记为 UTF-8。

temp[12]
显然不是 UTF-8(U+0080 以上的所有字符都使用多字节编码)并且 Windows 本机使用 UTF-16,其中 232 (0xEB) 是 U+00EB 的正确编码 é

这只是 C 强制转换告诉编译器关闭的另一种情况,隐藏了明智的编译器错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.