c语言遍历中文字符串,c – 如何读取包含中文字符的UTF-8编码文件并在控制台上正确输出?...

这段代码演示了如何使用VC2010读取包含非拉丁字符的UTF-8文件,通过设置locale和codecvt_utf8实现。虽然测试表明它能正常工作,但并未确认对中文字符的支持。确保控制台使用支持UTF-16的字体以正确显示中文。
摘要由CSDN通过智能技术生成

此代码可能有所帮助(它是使用VC 2010编译的).我用包含非拉丁字符的UTF-8文件测试它似乎工作,但我不知道它是否适用于中文字符.有关更多信息,请查看以下链接:

_setmode和

codecvt_utf8.

#include

#include

#include

#include

#include

#include

#include

using namespace std; // Sorry for this!

void read_all_lines(const wchar_t *filename)

{

wifstream wifs;

wstring txtline;

int c = 0;

wifs.open(filename);

if(!wifs.is_open())

{

wcerr << L"Unable to open file" << endl;

return;

}

// We are going to read an UTF-8 file

wifs.imbue(locale(wifs.getloc(), new codecvt_utf8()));

while(getline(wifs, txtline))

wcout << ++c << L'\t' << txtline << L'\n';

wcout << endl;

}

int _tmain(int argc, _TCHAR* argv[])

{

// Console output will be UTF-16 characters

_setmode(_fileno(stdout), _O_U16TEXT);

if(argc < 2)

{

wcerr << L"Filename expected!" << endl;

return 1;

}

read_all_lines(argv[1]);

return 0;

}

如果中文字符看起来不像预期的那样,请确保控制台使用的是支持UTF-16的字体(即不使用位图字体).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值