C++ visual studio 中的 Ascii 字符代码与实际字符符号不匹配?

Ascii character codes in C++ visual studio don't match up with actual character symbols?

我正在尝试用字符表示 8 位数字,但我不想使用 int 来定义字符,我想使用实际的字符符号。但是当我使用标准的 ASCII 代码时,32-100 范围之外的所有东西都是完全不同的。

所以我遍历了所有 256 个 ascii 代码并打印了它们,例如它说这个字符 '±' 是代码 241。但是当我从控制台复制并粘贴该符号时,甚至使用 alt 代码时,它说那个字符是代码-79 ...我怎样才能让这两个东西匹配起来?谢谢!

应该是codepage的问题。 Windows 控制台应用程序有一个代码页,可将 0-255 个字符“映射”到 Unicode 字符的子集。它是从前 Unicode 时代就存在的东西,用于支持非美国字符集。有一些 Windows API 到 select 控制台的代码页:SetConsoleOutputCP(和 SetConsoleCP 用于输入)

#include <iostream>

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

int main() {
    unsigned int cp = ::GetConsoleOutputCP();

    std::cout << "Default cp of console: " << cp << std::endl;

    ::SetConsoleCP(28591);
    ::SetConsoleOutputCP(28591);

    cp = ::GetConsoleOutputCP();

    std::cout << "Now the cp of console is: " << cp << std::endl;

    for (int i = 32; i < 256; i++) {
        std::cout << (char)i;

        if (i % 32 == 31) {
            std::cout << std::endl;
        }
    }
}

28591代码页是将0-255字符映射到unicode 0-255代码点的iso-8859-1代码页(28591数字取自https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers