小编Sea*_*rgX的帖子

UTF-8,CString和CFile?(C++,MFC)

我目前正在开发一个专门用于UTF-8的MFC程序.在某些时候,我必须将UTF-8数据写入文件中; 要做到这一点,我正在使用CFiles和CStrings.

当我将utf-8(俄语字符,更准确)数据写入文件时,输出看起来像

Ðàñïå÷àòàíî:
Ñèñòåìà
Ïðîèçâîäñòâî
Run Code Online (Sandbox Code Playgroud)

等等.这绝对不是utf-8.要正确读取这些数据,我必须更改我的系统设置; 将非ASCII字符更改为俄语编码表确实有效,但随后我所有基于拉丁语的非ascii字符都会失败.无论如何,我就是这样做的.

CFile CSVFile( m_sCible, CFile::modeCreate|CFile::modeWrite);
CString sWorkingLine;
//Add stuff into sWorkingline
CSVFile.Write(sWorkingLine,sWorkingLine.GetLength());
//Clean sWorkingline and start over
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我应该用别的东西吗?我错过了什么样的捕获?我会为你的智慧和经验而努力,和其他程序员一样.

编辑:当然,正如我刚问了一个问题,我终于找到了一些可能有趣的东西,可以在这里找到.以为我可能会分享它.

编辑2:

好的,所以我将BOM添加到我的文件中,该文件现在包含chineese字符,可能是因为我没有将我的行转换为UTF-8.添加bom我做了...

char BOM[3]={0xEF, 0xBB, 0xBF};
CSVFile.Write(BOM,3);
Run Code Online (Sandbox Code Playgroud)

之后,我补充说......

    TCHAR TestLine;
    //Convert the line to UTF-8 multibyte.
    WideCharToMultiByte (CP_UTF8,0,sWorkingLine,sWorkingLine.GetLength(),TestLine,strlen(TestLine)+1,NULL,NULL);
    //Add the line to file.
    CSVFile.Write(TestLine,strlen(TestLine)+1);
Run Code Online (Sandbox Code Playgroud)

但后来我无法编译,因为我真的不知道如何获得TestLine的长度.strlen似乎不接受TCHAR. 固定,使用1000的静态长度.

编辑3:

所以,我添加了这段代码......

    wchar_t NewLine[1000];
    wcscpy( NewLine, CT2CW( (LPCTSTR) sWorkingLine ));
    TCHAR* TCHARBuf = new TCHAR[1000];

    //Convert the line to UTF-8 multibyte.
    WideCharToMultiByte (CP_UTF8,0,NewLine,1000,TCHARBuf,1000,NULL,NULL);

    //Find how many …
Run Code Online (Sandbox Code Playgroud)

c++ mfc utf-8 cstring cfile

15
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×1

cfile ×1

cstring ×1

mfc ×1

utf-8 ×1