gpt4 book ai didi

c++ - WideCharToMultiByte 问题

转载 作者:行者123 更新时间:2023-11-30 01:00:02 31 4
gpt4 key购买 nike

我有来自 previous question 的可爱功能,如果我这样做,效果很好:

wstring temp;
wcin >> temp;

string whatever( toUTF8(getSomeWString()) );

// store whatever, copy, but do not use it as UTF8 (see below)

wcout << toUTF16(whatever) << endl;

复制了原始形式,但中间形式通常包含额外的字符。例如,如果我输入 àçé作为输入,并添加一个 cout << whatever声明,我会得到┬à┬ç┬é作为输出。

我是否仍可以使用此字符串与从 ASCII 来源获得的其他字符串进行比较?或者以不同的方式提问:如果我输出 ┬à┬ç┬é通过 linux 中的 UTF8 cout,它会读取 àçé ?是字符串的字节内容àçé , 通过 cin 在 UTF8 linux 中读取,与 Win32 API 得到的完全一样?

谢谢!

PS:我问的原因是因为我需要大量使用字符串来与其他读取值进行比较(比较和连接...)。

最佳答案

首先我要说的是,在 Windows 中似乎没有可以通过 cout 将 UTF-8 文本输出到控制台(假设您使用 Visual工作室)。但是,您可以为测试做的是通过 Win32 API fn WriteConsoleA 输出您的 UTF-8 文本:

if(!SetConsoleOutputCP(CP_UTF8)) { // 65001
cerr << "Failed to set console output mode!\n";
return 1;
}
HANDLE const consout = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD nNumberOfCharsWritten;
const char* utf8 = "Umlaut AE = \xC3\x84 / ue = \xC3\xBC \n";
if(!WriteConsoleA(consout, utf8, strlen(utf8), &nNumberOfCharsWritten, NULL)) {
DWORD const err = GetLastError();
cerr << "WriteConsole failed with << " << err << "!\n";
return 1;
}

这应该输出:Umlaut AE = Ä/ue = ü 如果您将控制台 (cmd.exe) 设置为使用 Lucida Console 字体。

至于你的问题(取自你的评论)如果

a win23 API converted string is the same as a raw UTF8 (linux) string

我会说是的:给定一个 Unicode 字符序列,它的 UTF-16 (Windows wchar_t) 表示通过 WideCharToMultiByte 函数转换为 UTF-8 (char) 表示将始终产生相同的字节顺序。

关于c++ - WideCharToMultiByte 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372399/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com