2012-05-27 61 views
0

我正在創建一個程序來讀取一些文件。 在讀取文件中的一個文件時,我遇到了一些元音變音字符。 我應該如何讀取這些字符 &將它們存儲在字符串中? 目前我正在使用string::getline()這是無法讀取這些字符&閱讀指針的位置不遞增。 該字符在一行之前有一些空格。 所以我使用ws刪除空格。 我用peek來理解問題;同時懸停在Peek o/p字符VS2010上顯示y上有2個點。所以我想這是變音符。如何從文件中讀取變音符號?

+5

http://www.joelonsoftware.com /articles/Unicode.html – Thomas

+2

第1步:瞭解Unicode。第2步:使用'wstring'。 – chris

+0

好的謝謝! 非常翔實:) :) –

回答

0

如果這是你所需要的 - 這個代碼文件讀取(UTF-8)在德語文本,它打印在控制檯上,並保存在輸出文件 -

#include <sstream> 
#include <iostream> 
#include <fstream> 
//To handle localized input - 
#include <windows.h> 
#include <conio.h> 

int main() 
{ 

//read from file - 
    std::ifstream stream("c:\\temporary\\in.txt"); 
    std::string line; 

    if (stream.is_open()) 
    { 
     std::getline(stream, line); 
    } 

//print on console - 
    if(!SetConsoleOutputCP(CP_UTF8)) { // 65001 
     std::cerr << "Failed to set console output mode!\n"; 
     return 1; 
    } 
    HANDLE const consout = GetStdHandle(STD_OUTPUT_HANDLE); 
    DWORD nNumberOfCharsWritten; 
    const char* utf8 = line.c_str(); 
    if(!WriteConsoleA(consout, utf8, strlen(utf8), &nNumberOfCharsWritten, NULL)) { 
     DWORD const err = GetLastError(); 
     std::cerr << "WriteConsole failed with << " << err << "!\n"; 
     return 1; 
    } 

//write to file - 
    std::fstream myfile; 
    myfile.open("c:\\Temporary\\out.txt",std::ios::out); 
    if (myfile.is_open()) 
    { 

     myfile << line <<"\n"<<std::endl; 
    } 
    myfile.flush(); 
    myfile.close(); 
    return 0; 
} 
+0

非常感謝你! 其中的數據類型應該存儲unicode字符除了w_char? –

+0

剛從一次長途旅行中返回。無論如何,你可以使用char(UTF-8),wchar_t(UTF-16),而在C++ 11中有char16_t(UTF-16)和char_32t(utf-32)。有關詳細信息,請參見本書 - http://books.google.co.il/books?id = sN_0ovp_yv4C&pg = PT515&lpg = PT515&dq = wide + character + in + C%2B%2B&source = bl&ots = LjDWr1DDHE&sig = zwbiVlWzajJFDD29G37IlPh_59s&hl = en&sa = X&ei = K2T5TrbSCsye-Qb_ws2rDw&redir_esc = Y#v = onepage&q =寬%20character%20英寸%20C%2B%2B&F =假 – SChepurin