小编mh.*_*mh.的帖子

寻找支持UTF8的格式化函数,如printf()等

我在使用C标准库格式化函数(如sprintf())处理包含非ASCII字符的UTF-8字符串时发现了一个有趣的问题:

printf()系列的功能不知道utf-8并根据字节数而不是字符处理所有内容.因此格式不正确.

简单的例子:

#include <stdio.h>

int main(int argc, char *argv[])
{
    const char* testMsg = "Tääääßt";
    char buf[1024];
    int len;

    sprintf(buf, "|%7.7s|", testMsg);
    len = strlen(buf);
    printf("Result=\"%s\", len=%d", buf, len);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

 Result="|Täää|", len=7
Run Code Online (Sandbox Code Playgroud)

很可能你们中的一些人会建议将应用程序从char转换为wchar_t并使用fwprintf()等,但由于现有的巨大应用程序,这绝对是不可能的.我可以想象编写一个在内部使用这些函数的包装器,但这会非常棘手并且非常低效.

因此,最好的解决方案是替换标准C库的格式化功能的UTF-8.

目前我正在研究QNX 6.4,但回复其他操作系统.例如Linux,也非常受欢迎.

c utf-8 libc qnx

3
推荐指数
1
解决办法
5179
查看次数

标签 统计

c ×1

libc ×1

qnx ×1

utf-8 ×1