我有一个中文或阿拉伯语的utf-8字符。我需要获取UTF-8字符的值,比如获取ASCII字符的值。我需要在“C”中实现它。你能提出你的建议吗?
例如:
char array[3] = "ab";
int v1,v2;
v1 = array[0];
v2 = array[1];
在上面的代码中,我将在v1和v2中获得相应的ASCII值。对于UF8字符串,我需要获取字符串中每个字符的值。
答案 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()
,mbstowcs
和mbsrtocws()
,它们应该非常简单易用。
答案 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位)。