java如何打印char字符_从终端C中的字符串中打印出unicode char

假设您正在使用 UTF-8 ,问题是单个 UTF-8 个字符可以占据 1 到 4 个字节(理论上为 6 ) .

为了遍历它们,您需要计算每个字符的大小 . 以下代码使用一个简单的表,但您也可以通过位操作获得创意:

#include

#include

#include

// return individual utf-8 chars as a vector of strings

std::vector<:string> utf8_split_chars(std::string const& s)

{

// table to get the size of a utf-8 character

static const char u8char_size[] =

{

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2

, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2

, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3

, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0

};

std::vector<:string> utf8_chars;

// increment the index i by the size of each utf-8 char

for(auto i = 0U; i < s.size(); i += u8char_size[(unsigned char)s[i]])

{

utf8_chars.emplace_back(&s[i], u8char_size[(unsigned char)s[i]]);

}

return utf8_chars;

}

int main()

{

std::string s = u8"建造 otoño κάτω";

std::cout << "s: " << s <

auto chars = utf8_split_chars(s);

for(auto const& c: chars)

std::cout << "c: " << c << '\n';

}

Output:

s: 建造 otoño κάτω 22 bytes

c: 建

c: 造

c:

c: o

c: t

c: o

c: ñ

c: o

c:

c: κ

c: ά

c: τ

c: ω

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值