C++ 读取CSV文件(UNICODE编码)C+时发生编码错误+;
我需要读取csv(UNICODE)并将数据放入2d数组中,现在我已经使用字符串完成了,但我需要使用LPTSTR,因为我必须处理的csv是UNICODE编码的,使用字符串我无法读取任何内容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
#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