Невозможно записать std :: wstring в wofstream - PullRequest
4 голосов
/ 24 февраля 2011

Я использую Qt / C ++ в системе Linux. Мне нужно преобразовать текст QLineEdit в std::wstring и записать его в std::wofstream. Он работает правильно для строк ascii, но когда я ввожу любой другой символ (арабский или узбекский), в файле ничего не пишется. (размер файла 0 байт).

это мой код:

wofstream customersFile;
customersFile.open("./customers.txt");
std::wstring ws = lne_address_customer->text().toStdWString();
customersFile << ws << ws.length() << std::endl;

Выходные данные для John Smith, введенные в строку редактирования, равны John Smith10. но для строк Unicode - ничего.

Сначала я подумал, что это проблема с QString::toStdWString(), но customersFile << ws.length(); записывает правильную длину всех строк. Итак, я думаю, что я делаю что-то не так с записью wstring в файл. [?]

EDIT:

Я снова пишу это в затмении. и скомпилировал его с g ++ 4.5. результат тот же:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
   cout << "" << endl; // prints
   wstring ws = L"سلام"; // this is an Arabic "Hello"
   wofstream wf("new.txt");
   if (!wf.bad())
      wf << ws;
   else
      cerr << "some problem";
   return 0;
}

1 Ответ

13 голосов
/ 24 февраля 2011

Добавить

#include <locale>

и в начале основного,

std::locale::global(std::locale(""));
...