C++ char*转UTF8
时间: 2023-09-11 16:04:09 浏览: 437
c/c++ 字符集 gbk/utf8互转,Ansi/Utf8互转 纯c实现跨平台
5星 · 资源好评率100%
在C中,char*表示一个字符串,而UTF-8是一种字符编码格式。要将char*转换为UTF-8,需要使用相应的函数库。
一种方法是使用iconv函数库。以下是一个示例:
```c
#include <iconv.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char* str = "Hello, 世界!";
size_t str_len = strlen(str);
size_t utf8_len = str_len * 3; // 最多3字节
char* utf8_str = (char*)malloc(utf8_len + 1);
iconv_t conv = iconv_open("UTF-8", "ASCII");
if (conv == (iconv_t)-1) {
perror("iconv_open");
exit(1);
}
char* inbuf = str;
size_t inbytesleft = str_len;
char* outbuf = utf8_str;
size_t outbytesleft = utf8_len;
size_t res = iconv(conv, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
if (res == (size_t)-1) {
perror("iconv");
exit(1);
}
utf8_str[utf8_len - outbytesleft] = '\0';
printf("%s\n", utf8_str);
iconv_close(conv);
free(utf8_str);
return 0;
}
```
该示例中,使用iconv_open打开一个从ASCII编码到UTF-8编码的转换器。然后,使用iconv函数将输入字符串转换为输出字符串。最后,使用iconv_close关闭转换器并释放内存。
注意,由于UTF-8编码的字符可能需要多个字节,因此在分配输出字符串的内存时,需要根据输入字符串的长度计算可能的最大输出长度。
另一种方法是使用libiconv函数库。以下是一个示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iconv.h>
int main() {
char* str = "Hello, 世界!";
size_t str_len = strlen(str);
size_t utf8_len = str_len * 3; // 最多3字节
char* utf8_str = (char*)malloc(utf8_len + 1);
iconv_t conv = iconv_open("UTF-8", "ASCII");
if (conv == (iconv_t)-1) {
perror("iconv_open");
exit(1);
}
char* inbuf = str;
size_t inbytesleft = str_len;
char* outbuf = utf8_str;
size_t outbytesleft = utf8_len;
size_t res = iconv(conv, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
if (res == (size_t)-1) {
perror("iconv");
exit(1);
}
utf8_str[utf8_len - outbytesleft] = '\0';
printf("%s\n", utf8_str);
iconv_close(conv);
free(utf8_str);
return 0;
}
```
该示例中,使用iconv_open打开一个从ASCII编码到UTF-8编码的转换器。然后,使用iconv函数将输入字符串转换为输出字符串。最后,使用iconv_close关闭转换器并释放内存。
注意,由于UTF-8编码的字符可能需要多个字节,因此在分配输出字符串的内存时,需要根据输入字符串的长度计算可能的最大输出长度。
阅读全文