C++ 读取CSV文件(UNICODE编码)C+时发生编码错误+;

C++ 读取CSV文件(UNICODE编码)C+时发生编码错误+;,c++,csv,visual-c++,unicode,encoding,C++,Csv,Visual C++,Unicode,Encoding,我需要读取csv(UNICODE)并将数据放入2d数组中,现在我已经使用字符串完成了,但我需要使用LPTSTR,因为我必须处理的csv是UNICODE编码的,使用字符串我无法读取任何内容 #include <algorithm> #include <fstream> #include <iostream> #include <iterator> #include <sstream> #include <string> #in

我需要读取csv(UNICODE)并将数据放入2d数组中,现在我已经使用字符串完成了,但我需要使用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");
    }

}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
向量值;
向量值线;
ifstream fin(“C:\\Users\\Administrator\\Desktop\\test.csv”);
字符串项;
for(字符串行;getline(fin,line);)
{
istringstream in(线);
while(getline(in,item,“;”)
{
valueline.push_back(item.c_str());
}
值。推回(valueline);
valueline.clear();
}
fin.close();
int i=0;
对于(i=0;i
如果您确定您的文件是真正的unicode(如UTF-16)并且有两个字节的编码字符,请使用“w”流和字符串(
std::wifstream
std::wstring

如果您的文件可能是UTF-8或任何其他编码,您应该首先执行转换(因此,首先像往常一样读取字节流,然后转换为
wstring

要将UTF-8转换为宽字符串(转换为可以转换为unicode windows字符串的
wstring
),可以使用
std::wstring\u convert
及其成员函数
from\u bytes
将UTF-8字节转换为unicode字符:

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
std::wstring myunicodestr = convert.from_bytes(myutf8str);
std::wstring\u convert;
std::wstring myunicodestr=convert.from_字节(myutf8str);

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

在您回答问题之前,我尝试过它,但仍然成功:D