yaojianing Ответов: 2

Как прочитать файл UNICODE ?(С++)


Я хочу прочитать текстовый файл,поэтому используйте стандартный C++, чтобы получить его.Но в результате получается куча мусорных символов.
ifstream in("1.lrc");
string s;
while(getline(in,s)
{
   …………
}
in.close();

Как я могу прочитать файл UNICODE с помощью C++?
Спасибо.
Мой английский очень беден.

2 Ответов

Рейтинг:
2

yaojianing

Спасибо за вашу помощь.

ifstream fin(strFileName,ios_base::in|ios_base::binary);
	size_t index = 2;
	wstring ws;
	while (!fin.eof())
	{
		//fin.seekg(index, ios::beg);
		wchar_t wch;
		fin.read((char *)(&wch), 2);
		if (wch == 0x000D)
		{
			CUser u;
			string s;
			s=u.WstringToString(ws);
			AnaliseString(s);
			ws.erase(0, ws.size() + 1);
			index += 4; 		}
		else
		{
			ws.append(1,wch);
			index += 2;
		}
	}


Рейтинг:
15

Richard MacCutchan

Если источником является Unicode, то вы должны использовать wstring.


yaojianing

Спасибо за ваш ответ.Но я с тобой не согласен.Я когда-либо использовал "wstring" для чтения файла Unicode,результат тот же самый.

kimnguyentran

извините, вы можете опубликовать это досье? Спасибо!

nv3

Возможно, вам следует взять шестнадцатеричный редактор, чтобы посмотреть на файл и решить, действительно ли это обычный файл Unicode-16. Например, он может быть закодирован как UTF-8, другая кодировка Unicode, что потребует какого-то другого метода его чтения.

Richard MacCutchan

Извините, я не понимаю, о чем вы говорите.

Chuck O'Toole

Учитывая определение файлов LRC (http://en.wikipedia.org/wiki/LRC_(file_format)) скорее всего, это файл UTF-8, поэтому только некоторые символы должны быть "мусорными" и нуждаться в переводе. Если все это "мусор", у вас есть какой-то другой файл или проблема.

kimnguyentran

извините, я думал, что у вас есть примеры кода, поэтому, пожалуйста, пришлите мне файл.
Я немного говорю по-английски, надеюсь, вы понимаете.
Я не знаю, как написать код "Read and write UNICOE, UTF-16, UTF-8" b C++ (visual studio), так что вы можете мне помочь? спасибо.

Richard MacCutchan

Да, я забыл, что потоки STL не могут правильно обрабатывать Unicode. Вы должны использовать обычный файл Io в стиле C, чтобы прочитать его и проверить кодировку вручную. этот Совет может быть, это поможет вам кое-что объяснить.

kimnguyentran

Большое спасибо!.