如何读取西班牙语编码文件并逐个字符地存储?

时间:2015-06-15 16:51:47

标签: c++ c++11 utf-8 wchar-t wstring

我无法读取文件并将其存储在内存中,因为它是用西班牙语编写的,我认为这可能是编码问题。我想知道一种分别打印或存储每个字符的方法。我已经尝试了很多东西,但我发现最准确的方法是使用方法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 个答案:

答案 0 :(得分:0)

您正在使用std::wifstream,它使用wchar_t(UTF-16或UTF-32,具体取决于平台)返回Unicode字符,但您没有告诉std::wifstream编码是什么源文件是这样的,它可以将文件数据从西班牙语解码为Unicode。在开始阅读文件数据之前,您需要imbue() std::wifstream适当的西班牙语区域设置。