【问题标题】:Encoding error reading CSV file (UNICODE encoded) C++读取 CSV 文件的编码错误(UNICODE 编码)C++
【发布时间】:2017-03-17 13:15:25
【问题描述】:

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

}

【问题讨论】:

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


    【解决方案1】:

    如果您确定您的文件确实是 unicode(如 UTF-16)并且有两个字节编码的字符,请使用“w”流和字符串(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

    【讨论】:

    • 我在您回答之前尝试过,并且同样感谢:D
    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2015-09-01
    • 2011-03-14
    相关资源
    最近更新 更多