gpt4 book ai didi

C++/wcout/UTF-8

转载 作者:行者123 更新时间:2023-11-27 23:13:10 28 4
gpt4 key购买 nike

我正在读取一个 UTF-8 编码的 unicode 文本文件,并将其输出到控制台,但显示的字符与我用来创建该文件的文本编辑器中的字符不同。这是我的代码:

#define UNICODE

#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>

#include "pugixml.hpp"

using std::ifstream;
using std::ios;
using std::string;
using std::wstring;

int main( int argc, char * argv[] )
{
ifstream oFile;

try
{
string sContent;

oFile.open ( "../config-sample.xml", ios::in );

if( oFile.is_open() )
{
wchar_t wsBuffer[128];

while( oFile.good() )
{
oFile >> sContent;
mbstowcs( wsBuffer, sContent.c_str(), sizeof( wsBuffer ) );
//wprintf( wsBuffer );// Same result as wcout.
wcout << wsBuffer;
}

Sleep(100000);
}
else
{
throw L"Failed to open file";
}
}
catch( const wchar_t * pwsMsg )
{
::MessageBox( NULL, pwsMsg, L"Error", MB_OK | MB_TOPMOST | MB_SETFOREGROUND );
}

if( oFile.is_open() )
{
oFile.close();
}

return 0;
}

一定有一些我不了解编码的地方。

最佳答案

问题是 mbstowcs 实际上并不使用 UTF-8。它使用与 UTF-8 不兼容的旧式“多字节代码点”(尽管从技术上讲 [我相信] 可以定义 UTF-8 代码页,但 Windows 中没有这样的东西)。

如果你想把UTF-8转换成UTF-16,你可以使用MultiByteToWideChar , codepageCP_UTF8

关于C++/wcout/UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com