簡體   English   中英

讀取CSV文件(UNICODE編碼)時出現編碼錯誤C ++

[英]Encoding error reading CSV file (UNICODE encoded) C++

我需要讀取一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM