2015-06-15 3 views
0

У меня проблемы с чтением файла и хранением его на памяти, так как он написан на испанском языке, я думаю, что это может быть проблема с кодировкой. Я хотел бы знать способ печати или хранения каждого из символов отдельно. Я уже пробовал много вещей, но наиболее точный подход, который я нашел использует метод wstring readFile(const char* filename), как показано в коде:Как читать испанский кодированный файл и хранить его по символу?

#include <sstream> 
#include <fstream> 
#include <iostream> 
#include <fstream> 
#include <algorithm> 

std::wstring readFile(const char* filename)//Read using a file using wifstream 
{ 
    std::wifstream wif(filename); 

    std::wstringstream wss; 

    wss << wif.rdbuf(); 
    return wss.str(); 
} 

int main() 
{ 
    std::wstring fileContent = readFile("read.txt"); //Read file to wstring. 

    std::wcout << fileContent ; //Print the wstring. This works fine. 
    std::cout << " " << std::endl;//Give spacing. 

    wchar_t a; //create variable wchar_t. 
    int fs = fileContent.size(); 
    std::cout << "Number of chars: " << fs; //Check content size. 

    for (int i = 0; i < fs; i++){ //I want to print each letter. 

     a = fileContent.at(i); //Assign to "a" content of specified index. 

     std::wcout << " " << a ; //Print character stored in variable a. 
    } 
} 

Кажется, есть проблема при сохранении или печати значение fileContent.at(i) или fileContent[i] в переменная wchar_t a. Знаете ли вы, что можно улучшить в коде или дать мне руководство для решения этой проблемы?

Я использую Macintosh и Linux, если это помогает знать. Спасибо!

+1

«символ по характеру» никогда не имеет смысла в Юникоде. Вам следует избегать 'wchar_t' целиком и использовать utf-8 закодированные контейнеры' char', а затем использовать отдельные API в зависимости от того, хотите ли вы подсчитывать байты, единицы кода, кодовые точки, столбцы, графемы или кластеры графемы. – o11c

+0

'Кажется, что есть проблема' Итак, в чем проблема? Какой результат вы ожидаете, что вы наблюдаете, и как они отличаются друг от друга? –

+0

Итак, проблема в том, что ожидаемый результат в консоли, чтобы увидеть, какая строка хранится в переменной 'wchar_t a'. В качестве примера я бы ожидал увидеть акцентированный i как í в консоли, но я просто получил: ??. – newToStackOverflow

ответ

0

Вы используете std::wifstream, которая возвращает символы Unicode, используя wchar_t (UTF-16 или UTF-32, в зависимости от платформы), но вы не говорите std::wifstream, что кодировка исходного файла, так что он может декодировать файл данные от испанского до Unicode. Чтобы начать чтение данных файла, вам необходимо указать imbue() соответствующий испанский язык в std::wifstream.

 Смежные вопросы

  • Нет связанных вопросов^_^