如何在输出中使用带有任何其他符号的单个 utf-8 字符?

How to use in output a single utf-8 char with any other symbol?

我想在新行中打印一个字符,但得到的是“?”在带有非 ASCII 符号的终端中。我怎样才能避免这种情况? 我在网上查了资料,没有成功。提前致谢!

char buff[255] = "хай, man";
int slen1 = strlen(buff);
printf("%s\n", buff);
for (int i=0; i < slen1; i++) {
    printf("%c\n", buff[i]);
}

如果我将 %c 与任何其他符号一起使用,就会发生这种情况。

Output

因为我们知道该字符串是 UTF-8 编码的,所以我们可以使用自定义代码处理该字符串。
注意这是容易出错的。下面也缺少错误检查。

#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>

int main(void) {
  char buff[255] = u8"хай, man";
  printf("buff[] <%s>\n", buff);
  size_t len = strlen(buff);
  printf("string length %zu\n", len);
  for (size_t i = 0; i<=len; i++) {
    printf("%zu %02X %c\n", i, 0xFFu & (unsigned) buff[i],
        isprint((unsigned char) buff[i]) ? buff[i] :  '?' );
  }
  puts("");

  for (size_t i = 0; i<len; i++) {
    printf("%zu ", i);
    char ch = buff[i];
    // If ASCII character ....
    if ((ch & 0x80) == 0) {  
      printf("%c\n", ch);
    } else {
      // Process UTF-8
      char b[5] = { ch };
      size_t j;
      for (j = 1; (j < 4) && ((buff[i+j] & 0xC0) == 0x80); j++) {
        b[j] = buff[i+j];
      }
      b[j] = 0;
      printf("%s\n", b);  // Print 1 UTF-8 character.
      i += j - 1;
    }
  }
  return 0;
}

输出

buff[] <хай, man>
string length 11
0 D1 ?
1 85 ?
2 D0 ?
3 B0 ?
4 D0 ?
5 B9 ?
6 2C ,
7 20  
8 6D m
9 61 a
10 6E n
11 00 ?

0 х
2 а
4 й
6 ,
7  
8 m
9 a
10 n