我有一个中文或阿拉伯文的 utf-8 字符。我需要获取该 UTF-8 字符的值,例如获取 ASCII 字符的值。我需要在“C”中实现它。你能提供你的建议吗?
例如:
char array[3] = "ab";
int v1,v2;
v1 = array[0];
v2 = array[1];
在上面的代码中,我将在 v1 和 v2 中得到相应的 ASCII 值。以与 UF8 字符串相同的方式,我需要获取字符串中每个字符的值。
只有 C 语言的 C11 标准版本提供 UTF-8 支持,因此根据您所针对的标准,您可以使用 C11 功能 ( <uchar.h>
) 或依赖 UTF 库,例如ICU。
没有 UTF-8 字符这样的东西。有 Unicode 字符,也有 Unicode 字符的编码,例如 UTF-8。
您可能想要的是将几个字节(以 UTF-8 编码并表示单个 Unicode 字符)解码为 Unicode 代码点。
网上有很多这方面的 C 源代码。只是谷歌UTF-8 解码 C。
更新:
您显然要寻找的不仅仅是一个字符的 UTF-8 解码,即将字节数组(UTF-8 解码文本)解码为整数数组(Unicode 代码点)的函数。
答案保持不变:使用谷歌。那里有很多 C 代码。
C 和 C++ 模型是编码与语言环境相关联,因此使用该模型的代码适用于语言环境的编码,无论它是什么。
如果您的语言环境使用 UTF8 进行窄编码。请参阅mbtowc()
、、和mbrtowc()
,它们应该非常易于使用。mbstowcs
mbsrtocws()
使用 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
编码的起始偏移量。j
并c
包含字符的 unicode 值(32 位)。