计算utf8

时间:2016-09-25 14:55:01

标签: c++ c++11 utf-8

我想打印所有可能的UTF-8值。类似的东西:

  uint32_t max = 0xFFFFFFFF;
  for (uint32_t i = 0; i <= max; i++)
  {
    std::cout << std::hex << i << std::endl;    
  }

但是我打印了很多不可能的案例。还有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

我不知道你为什么要这样做,但是你走了:

int i = 0;
for(; i < 0x80; ++i) // 0xxxxxxx
    printf("%.2x\n", i);
for(; i < 0x800; ++i) // 110xxxxx 10xxxxxx
    printf("%.2x %.2x\n", 0xc0 | (i >> 6), 0x80 | (i & 0x3f));
for(; i < 0x10000; ++i) // 1110xxxx 10xxxxxx 10xxxxxx
    if(i < 0xd800 || i >= 0xe000) // skip surrogates
        printf("%.2x %.2x %.2x\n", 0xe0 | (i >> 12), 0x80 | ((i >> 6) & 0x3f), 0x80 | (i & 0x3f));
for(; i < 0x110000; ++i) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    printf("%.2x %.2x %.2x %.2x\n", 0xf0 | (i >> 18), 0x80 | ((i >> 12) & 0x3f), 0x80 | ((i >> 6) & 0x3f), 0x80 | (i & 0x3f));