将特定范围的所有UTF-8字符打印为utf-8编码文本

时间:2013-11-16 13:15:47

标签: c encoding utf-8

我有这段代码可以打印1536到1791(阿拉伯字符)范围内的所有字符

#include <stdio.h>

void main()
{

int t;
t=1536;
do
{
printf("%c",t);
t++;
}
while(t<=1791);
}

示例输出


!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”

某些字符是不可读的,因为它应该存储在utf-8文本文件中,因此它可以读取

任何建议如何做到这一点?

由于

1 个答案:

答案 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的应用程序中打开它。