У меня проблемы с чтением файла и хранением его на памяти, так как он написан на испанском языке, я думаю, что это может быть проблема с кодировкой. Я хотел бы знать способ печати или хранения каждого из символов отдельно. Я уже пробовал много вещей, но наиболее точный подход, который я нашел использует метод 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, если это помогает знать. Спасибо!
«символ по характеру» никогда не имеет смысла в Юникоде. Вам следует избегать 'wchar_t' целиком и использовать utf-8 закодированные контейнеры' char', а затем использовать отдельные API в зависимости от того, хотите ли вы подсчитывать байты, единицы кода, кодовые точки, столбцы, графемы или кластеры графемы. – o11c
'Кажется, что есть проблема' Итак, в чем проблема? Какой результат вы ожидаете, что вы наблюдаете, и как они отличаются друг от друга? –
Итак, проблема в том, что ожидаемый результат в консоли, чтобы увидеть, какая строка хранится в переменной 'wchar_t a'. В качестве примера я бы ожидал увидеть акцентированный i как í в консоли, но я просто получил: ??. – newToStackOverflow