Управление китайским .txt в C ++ - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь показать в консоли текст на китайском, он был вставлен из википедии в файл .txt (я не знаю кодификацию, может быть, UTF-8?)

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
#include <locale>
#include <codecvt>
using namespace std;


    int main () {

        const locale utf8_locale
            = locale(locale(), new std::codecvt_utf8<wchar_t>());
        std::wifstream file("dao.txt");
        file.imbue(utf8_locale);

        wstring s;

            if (file.is_open())
            {
              while (getline(file, s))
              {
                    cout << s << '\n';
                    // Do something with the string
              }
               else cout << "Unable to open file";
           myfile.close();
            }
    return 0;
    }

Я получаю: ошибка: нет совпадения для 'operator <<' (типы операндов: 'std :: ostream {aka std :: basic_ostream}' и 'std :: __ cxx11 :: wstring {aka std :: __ cxx11:: basic_string} ') | </strong>

Почему << </em> не перегружен?

1 Ответ

0 голосов
/ 16 октября 2018

Есть пара ошибок:

Иначе не совпадает, если

        if (file.is_open())
        {
           ...
           else cout << "Unable to open file";
           ...
        }

Использовать std :: wcout.s - широкая строка.Используйте широкий вывод.

std::wcout << s << '\n';  // not std::cout notice the w 

Нет переменной с именем myfile Я, вероятно, имел в виду file

 /*my*/file.close();

Примечание:

Вы должны наполнить поток передоткрывая его.

    std::wifstream file;
    file.imbue(utf8_locale);
    file.open("dao.txt");

Проблема заключается в том, что наполнение завершится ошибкой, если из файла были прочитаны какие-либо символы.Некоторые реализации будут проверять, есть ли маркер спецификации (возвращая символы, если их нет).Но проверка этих символов спецификации означает, что файл был прочитан и, следовательно, приведет к сбою содержимого.Поэтому всегда открывайте файл перед открытием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...