编码错误读取CSV文件(UNICODE编码)C ++

时间:2017-03-17 13:15:26

标签: c++ csv visual-c++ unicode encoding

我需要读取一个csv(UNICODE)并将数据放入二维数组中,现在我已经使用字符串完成了它但我需要使用LPTSTR,因为我必须处理的csv是UNICODE编码并使用字符串我什么都读不懂。

#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include <windows.h>
#include <stdio.h>
#include <time.h>

using namespace std;

int main()
{
    vector<vector<string> > values;
    vector<string> valueline;



    ifstream fin("C:\\Users\\Administrator\\Desktop\\test.csv");
    string item;
    for (string line; getline(fin, line); )
    {
        istringstream in(line);

        while (getline(in, item, ';'))
        {
            valueline.push_back(item.c_str());
        }

        values.push_back(valueline);
        valueline.clear();
    }

    fin.close();

    int i = 0;

    for (i = 0; i < values.size(); i++) {
        for (int j = 0; j < values[i].size(); j++){
            printf("%s;",values[i][j]);

}
        printf("\n");
    }

}

1 个答案:

答案 0 :(得分:0)

如果您确定您的文件确实是unicode(如UTF-16)并且有两个字节编码的字符,请使用&#34; w&#34;流和字符串(std::wifstreamstd::wstring)。

如果您的文件可能是UTF-8或任何其他编码,则应首先执行转换(因此,请先将其读取为通常的字节流,然后再转换为wstring)。

对于从UTF-8转换为宽字符串(到wstring,可以转换为unicode windows字符串),您可以使用std::wstring_convert及其成员函数from_bytes来转换您的UTF -8字节为unicode字符:

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
std::wstring myunicodestr = convert.from_bytes(myutf8str);

如果您必须处理其他特定编码,则可能需要使用特定的库,例如iconv