UTF-8 – > C语言的ASCII

我有一个简单的问题,我无法在互联网上找到任何地方,如何在C中仅使用标准的lib将UTF-8转换为ASCII(大多数重音字符为相同的字符,无需重音)? 我找到了大多数语言的解决方案,但不是特别针对C语言。

谢谢!

编辑:评论的一些人让我仔细检查我需要什么,我夸大了。 我只需要一个关于如何创建一个函数的想法:带有重音的char – >没有重音的char。 🙂

没有内置的方法可以做到这一点。 UTF-8和ASCII之间几乎没有区别,除非你在谈论高级字符,无论如何都无法用ASCII表示。

如果你有一个你想要的特定映射(例如带有重音 – > a),那么你应该只是将其作为字符串替换操作来处理。

看看libiconv 。 即使你坚持不用图书馆这样做,你也许会在那里找到灵感。

一般来说,你不能。 UTF-8涵盖的不仅仅是重音字符。

每个体面的Unicode支持库(当然不是标准库)都有一种方法来分解KC或KDforms的字符串。 这将变音符号与字母分开。 为您提供过滤它们的机会。 不太确定这是值得追求的,结果只是对母语读者的胡言乱语,而不是每个字母都是可分解的。 换句话说,垃圾带有问号。

由于这是家庭作业,我猜你的老师是无能为力的,并且对UTF-8一无所知,并且可能在20世纪80年代被“代码页”和“扩展的ASCII”所困扰(你应该从你的词汇中删除你的词汇,如果你还没有)。 您的老师可能希望您编写一个128字节的查找表,将128-255范围内的CP437或Windows-1252字节映射到类似的ASCII字母。 它会像…

 void strip_accents(unsigned char *dest, const unsigned char *src) { static const unsigned char lut[128] = { /* mapping here */ }; do { *dest++ = *src < 128 ? *src : lut[*src]; } while (*src++); }