2017-03-17 238 views
0

我需要讀取一個csv(UNICODE),並將其中的數據放在一個二維數組中,現在我已經使用字符串完成它,但我需要它使用LPTSTR,因爲我有csv處理是UNICODE編碼和使用字符串我不能讀取任何東西。編碼錯誤讀取CSV文件(UNICODE編碼)C++

#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"); 
    } 

} 

回答

0

如果你確定你的文件確實是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

+0

我在你的答案之前試過了,並且感謝同樣的答案:D –