如何获取UTF-8字符的值

时间:2012-12-27 14:27:29

标签: c utf-8

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

例如:

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

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

在上面的代码中,我将在v1和v2中获得相应的ASCII值。对于UF8字符串,我需要获取字符串中每个字符的值。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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

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

网上有很多可用的C源代码。只需谷歌UTF-8 decoding C

<强>更新

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分: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)

进行编译

此处的索引k表示j个字符编码的起始偏移量。 c包含字符的unicode值(32位)。