如何在输出中使用带有任何其他符号的单个 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
我想在新行中打印一个字符,但得到的是“?”在带有非 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