我有这段代码可以打印1536到1791(阿拉伯字符)范围内的所有字符
#include <stdio.h>
void main()
{
int t;
t=1536;
do
{
printf("%c",t);
t++;
}
while(t<=1791);
}
示例输出
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”
某些字符是不可读的,因为它应该存储在utf-8文本文件中,因此它可以读取
任何建议如何做到这一点?
由于
答案 0 :(得分:2)
Unicode 赋予(某些)数字0 - 0x10FFFF的含义。我们将这些数字称为“代码点”,以及它们相关的含义“字符”。
UTF-8 是一种二进制格式,用于将Unicode字符表示为字节序列。它是一种可变长度编码,其中代码点值低于0x80的字符占用一个字节,其余低于0x800的字符占用两个字节,剩余的低于0x10000取三个字节,其余所有四个字节。
仅适用于前2048个代码点(涵盖用例)的UTF-8的部分实现可能如下所示:
#include <stdio.h>
void utf8print(unsigned int cp)
{
if (cp < 0x80)
{
printf("%c", cp);
}
else if (cp < 0x800)
{
printf("%c%c", 0xC0 + cp / 0x40, 0x80 + cp % 0x40);
}
// you should implement the three- and four-byte cases, too.
}
int main()
{
// characters below 32 are "not printable"
for (unsigned int i = 32; i != 2048; ++i)
{
printf("U+%04X: ", i);
utf8print(i);
fputc('\n', stdout);
}
}
这只是将原始字节写入标准输出; 你的责任是将输出终端设置为理解UTF-8,或者在文件中捕获输出并在处理UTF-8的应用程序中打开它。