C++输出度符号°在Windows10正常MacOS显示异常该如何解决
问题根因
- Windows控制台默认使用CP1252/GBK等单字节编码,数值248恰好对应度符号
°的编码值 - MacOS终端默认使用UTF-8多字节编码,单字节0xF8(即十进制248)不是合法的UTF-8字符,因此输出异常
可行解决方案
方案1:统一使用UTF-8编码(推荐)
C++11及以上标准支持UTF-8字符串字面量,配合平台专属的控制台编码设置即可实现跨平台兼容,不需要区分不同平台的输出逻辑:
首先修改输出代码,直接使用UTF-8格式的度符号:
// 替换原来的static_cast<unsigned char>(248)为u8"°" cout << "When temperature is " << temp << " degrees and wind speed is " << windSpeed << " m/s, then the wind chill is " << tempEff << u8"°" <<"C\n\n";
Windows平台需要额外增加控制台输出编码设置,放在main函数最开头即可,用条件编译避免影响其他平台:
#include <iostream> using namespace std; // Windows平台专属头文件 #ifdef _WIN32 #include <windows.h> #endif int main() { #ifdef _WIN32 // 设置控制台输出编码为UTF-8 SetConsoleOutputCP(CP_UTF8); #endif // 后续你的业务逻辑代码 double temp = 10, windSpeed = 5, tempEff = 8; cout << "When temperature is " << temp << " degrees and wind speed is " << windSpeed << " m/s, then the wind chill is " << tempEff << u8"°" <<"C\n\n"; return 0; }
方案2:条件编译分平台输出
如果不想修改控制台默认编码,可以针对不同平台输出对应编码的度符号:
#ifdef _WIN32 // Windows下用单字节编码的度符号 cout << tempEff << static_cast<unsigned char>(248) << "C\n\n"; #else // Mac/Linux下用UTF-8编码的度符号 cout << tempEff << "°" << "C\n\n"; #endif
内容的提问来源于stack exchange,提问作者JMBaker
相关产品推荐
相关产品推荐

