Windows 不想检测重音符号 c++

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

我正在

C++
中编写一个程序,我需要检测重音符号和宏符号,所以
áéíóúāēīōūȳ
。我正在使用
Windows 11
。我使用
getline(cin, input)
,如果
input
有任何长音符号或重音符号,它会将其视为空白字符,
ágȳ
=
g

我使用带有

chcp 65001
的 powershell 终端,它可以正确显示带有
cout
的重音符号,但无法正确接收输入。

这是一些代码:

#include <iostream>
#include <locale>
#include <string>

using namespace std;

int main() {
    // Set the console to UTF-8 encoding
    // system("chcp 65001 > nul");
    setlocale(LC_ALL, "es_ES.UTF-8"); // Ensure UTF-8 encoding

    string a;
    cout << "Write here āēīōū (with accents and macrons):" << endl;

    // Capture input with getline
    getline(cin, a);

    cout << endl << "You wrote: " << a << endl;

    // Compare the input with a specific character
    if (a == "á") {
        cout << "It's the same!" << endl;
    } else {
        cout << "It's not the same." << endl;
    }
    
    for (int i = 0; i < a.size(); ++i)
        cout << "a[i]: " << a[i] << endl;
    cout << endl;

    return 0;
}
c++ windows powershell locale
1个回答
0
投票

我正在使用 Microsoft 的新终端应用程序,并且我可以为每个字符获得正确的输入和输出:

if (a == "ȳ") { 

Write here āēīōū (with accents and macrons):
ȳ

You wrote: ȳ
It's the same!
a[i]:

代码末尾的迭代不起作用的原因非常简单:std::string 以多个字节序列存储 utf8 字符(char AFAIK)。您不能只是从 std::string 指向的序列中提取 utf8 符号。

更改为

cout << "a[i]: " << a << endl;
解决了问题:

Write here āēīōū (with accents and macrons):
āēīōū

You wrote: āēīōū
It's not the same.
a[i]: āēīōū
© www.soinside.com 2019 - 2024. All rights reserved.