2011-01-29 4 views
0

У меня есть программа, которая в основном пишет символы, как этотC++ Чтение/запись символов больше, чем ~ 50000

wchar_t c[5] = {static_cast<wchar_t>(x1), static_cast<wchar_t>(x2), static_cast<wchar_t>(x3), static_cast<wchar_t>(x4)}; 
fileWriter->Write(msclr::interop::marshal_as<String^>(c)); 

А потом есть их ввод обратно в программу только с

String^ fileContent = fileReader->ReadToEnd(); 

Моя проблема в том, что x1/x2/x3/x4 имеет целочисленное значение некоторого большого числа (я не могу быть уверен, что, но я думаю, что он где-то вокруг, когда он превышает 50 000), тогда он читает в символе со значением 65533.

Я перепутал с значениями кодировки StreamReader и StreamWriter, но я сначала их установил в System :: Text :: Encoding :: Unicode и не могу понять, почему это не сработает ...

I «Даже не уверен, неправильно ли он пишет символ или читает его ... Когда я открываю текстовый файл, который он создает, все они нечитабельные символы для моего ПК ... Я действительно в недоумении за идеи. Кто-нибудь знает, что я здесь делаю неправильно?

ответ

2

Это, вероятно, распространяется на Unicode FAQ «What is a surrogate?« Непонятно, что вы на самом деле пытаетесь выполнить, но, похоже, вы должны использовать FileStream, а не StreamWriter. Байты и символы: не сменный.

+0

Да, жаль, что это довольно большая программа, я не мог дать много контекста, не выходя из темы, но входные/выходные файлы вызывают в совершенно разные времена, поэтому я не думаю, что хочу FileStream. И я думаю, что ваша ссылка действительно объяснила это ... Хотя все, что я вижу, это значит, что я не могу делать то, что я пытался сделать :( –

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