C++打开utf8输出和输入

 类型什么的都用前缀w宽字符,主要是是第九行:保存个类型变量,和12行设置out编码还有19行设置in编码

#include <iostream>
#include <codecvt>
#include <fstream>
#include <string>

int main(void)
{
    using namespace std;
    auto LocUtf8 = locale(locale(""), new codecvt_utf8<wchar_t>);
    // 输出文件
    wofstream wfo(L"F:\\a_ligong\\HYL38.txt");
    wfo.imbue(LocUtf8);
    wfo << L"这是Utf-8编码的文本文件!";
    wfo.close();

    // 输入文件
    wifstream wfi(L"F:\\a_ligong\\HYL38.txt");
    wstring wstr;
    wfi.imbue(LocUtf8);
    wcout.imbue(locale(""));

    while (!wfi.eof()) {
        getline(wfi, wstr);
        wcout << wstr;
    }
    
    system("PAUSE");
}

非原创!!!转载只是找不到来源了,以后找到会补上

在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编码的字符可能需要多个字节,因此在分配输出字符串的内存时,需要根据输入字符串的长度计算可能的最大输出长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值