You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中打印指定范围的Unicode字符?

在C++中打印指定范围的Unicode字符

我想打印指定范围的Unicode字符,比如从U+00B2到U+00B5(以及其他任意范围),但不知道怎么定义可变的Unicode字符并做算术运算(比如递增)。现在我需要写出和下面这段代码等效的循环版本,请问该怎么实现?

#include <iostream>

int main() {

    std::cout << "\u00B2" << std::endl;
    std::cout << "\u00B3" << std::endl;
    std::cout << "\u00B4" << std::endl;
    std::cout << "\u00B5" << std::endl;

}

输出(Unicode字符):

²
³
´
µ

实现方案

Unicode字符本质是数值编码,你可以直接用整数类型存储这些码点,通过循环遍历数值范围来输出对应字符,以下是几种实用实现方式:

1. 单字节Unicode范围(如U+0000~U+00FF)

对于这类单字节字符,直接用char类型即可:

#include <iostream>

int main() {
    // 定义起始和结束的Unicode码点数值
    const char start = 0xB2;
    const char end = 0xB5;

    for (char c = start; c <= end; ++c) {
        std::cout << c << std::endl;
    }
    return 0;
}

2. 多字节Unicode范围(通用方案)

如果要处理超出单字节的字符,用wchar_t配合宽字符输出流wcout:

#include <iostream>
#include <locale>

int main() {
    // 设置本地化,确保宽字符能正确显示
    std::locale::global(std::locale(""));
    
    const wchar_t start = 0x00B2;
    const wchar_t end = 0x00B5;

    for (wchar_t c = start; c <= end; ++c) {
        std::wcout << c << std::endl;
    }
    return 0;
}

3. C++11及以后的标准方案(明确32位码点)

用char32_t直接对应Unicode码点值,配合u32cout使用:

#include <iostream>
#include <locale>

int main() {
    std::locale::global(std::locale(""));
    
    const char32_t start = U'\u00B2';
    const char32_t end = U'\u00B5';

    for (char32_t c = start; c <= end; ++c) {
        std::u32cout << c << std::endl;
    }
    return 0;
}

核心说明

  • Unicode码点可以直接用十六进制数值表示(比如0xB2就是U+00B2的数值),直接对数值做递增/递减即可遍历范围。
  • 输出前设置本地化(std::locale::global(std::locale(""))),能避免大部分控制台Unicode字符显示乱码问题。

内容的提问来源于stack exchange,提问作者alfC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:06:05