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

Encoding error reading CSV file (UNICODE encoded) C++

本文关键字:编码 错误 C++ 文件 UNICODE 读取 CSV      更新时间:2023-10-16

我需要读取一个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");
    }
}

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

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

要从 UTF-8 转换为宽字符串(转换为 wstring,可以转换为 unicode 窗口字符串(,您可以使用 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