5

我有一个中文或阿拉伯文的 utf-8 字符。我需要获取该 UTF-8 字符的值,例如获取 ASCII 字符的值。我需要在“C”中实现它。你能提供你的建议吗?

例如:

char array[3] = "ab";
int v1,v2;

v1 = array[0];
v2 = array[1];

在上面的代码中,我将在 v1 和 v2 中得到相应的 ASCII 值。以与 UF8 字符串相同的方式,我需要获取字符串中每个字符的值。

4

4 回答 4

5

只有 C 语言的 C11 标准版本提供 UTF-8 支持,因此根据您所针对的标准,您可以使用 C11 功能 ( <uchar.h>) 或依赖 UTF 库,例如ICU

于 2012-12-27T14:39:16.760 回答
5

没有 UTF-8 字符这样的东西。有 Unicode 字符,也有 Unicode 字符的编码,例如 UTF-8。

您可能想要的是将几个字节(以 UTF-8 编码并表示单个 Unicode 字符)解码为 Unicode 代码点。

网上有很多这方面的 C 源代码。只是谷歌UTF-8 解码 C

更新:

您显然要寻找的不仅仅是一个字符的 UTF-8 解码,即将字节数组(UTF-8 解码文本)解码为整数数组(Unicode 代码点)的函数。

答案保持不变:使用谷歌。那里有很多 C 代码。

于 2012-12-27T14:40:28.373 回答
5

C 和 C++ 模型是编码与语言环境相关联,因此使用该模型的代码适用于语言环境的编码,无论它是什么。

如果您的语言环境使用 UTF8 进行窄编码。请参阅mbtowc()、、和mbrtowc(),它们应该非常易于使用。mbstowcsmbsrtocws()

于 2012-12-27T15:42:43.990 回答
4

使用 icu,您可以使用U8_NEXT跳过 utf8 字符

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unicode/utf.h>
#include <unicode/ustring.h>

int main(int argc, char **argv)
{
    const char s[] = "日本語";

    UChar32 c;
    int32_t k;
    int32_t len = strlen(s);

    for (k = 0; k < len;) {
        U8_NEXT(s, k, len, c);
        printf("%d - %x\n", k, c);
    }

    return 0;

}

编译gcc utf.c -o utf $(icu-config --ldflags --ldflags-icuio)

这里的索引表示第 th 个字符k编码的起始偏移量。jc包含字符的 unicode 值(32 位)。

于 2012-12-27T15:58:23.530 回答