Кодировка названий вложений

Sharkfire
Дата: 08.05.2011 20:08:20
Получаю письмо с IdPop3

c заголовками и темами разобрался. теперь разбираю названия вложений:

автор
Content-Transfer-Encoding: base64
Content-Type: image/png; name="=?WINDOWS-1251?Q?=E3=EE=F2=EE=E2=EE_scan_3=5F3.png?="
Content-Disposition: attachment


Получаю вот такое в имени файла: ãîòîâî scan 3_3.png

Пытаюсь получить читабельное имя файла:

		TIdAttachment * a = (TIdAttachment*) m->MessageParts->Items[i];
     	        TEncoding * e = TEncoding::GetEncoding("windows-1251");
		int LOffset=TEncoding::GetBufferEncoding(a->FileName.BytesOf(),e);


Получаю в LOffse = 0 - т.е не выходит определить кодировку хотя я её явно указал

Что я делаю не так ?
Dimitry Sibiryakov
Дата: 08.05.2011 20:22:37

Sharkfire
Получаю вот такое в имени файла:

Получаешь в где? У тебя кодовая страница ANSI это действительно 1251?

Posted via ActualForum NNTP Server 1.4

Sharkfire
Дата: 08.05.2011 21:26:18
Dimitry Sibiryakov,

получаю в дебагере если смотрю строку имени файла a->FileName
"у меня" это всмысле в системе?
Sharkfire
Дата: 09.05.2011 01:04:15
помогите кто чем может)))
Anatoly Podgoretsky
Дата: 09.05.2011 07:05:04
Sharkfire
помогите кто чем может)))

По СИ, а у нас форум по Дельфи, по СИ это другой форум
Anatoly Podgoretsky
Дата: 09.05.2011 07:12:35
У тебя имя готово_scan_3_3.png
Sharkfire
Дата: 09.05.2011 11:15:45
Тут ведь вопрос не к языку привязан а к среде.

Anatoly Podgoretsky
У тебя имя готово_scan_3_3.png


Да. А как его получить?

Мне иногда призодят вложения в koi-8 а иногда в win 1251
Sharkfire
Дата: 10.05.2011 12:51:18
Anatoly Podgoretsky
У тебя имя готово_scan_3_3.png


Заинтриговали ))) Подскажите ))
Anatoly Podgoretsky
Дата: 10.05.2011 15:02:11
Sharkfire
Да. А как его получить?

Мне иногда призодят вложения в koi-8 а иногда в win 1251

Вопрос поставлен неправильно, можно спросить, а как ты его испортил?
Потому что письмо поступает в правильном, не испорченым именем, портится где то дальше, но где и как ты не говоришь, даже не понятно есть ли у тебя Дельфи, может и этого нет?
Sharkfire
Дата: 10.05.2011 15:24:18
Anatoly Podgoretsky,
	 POP3->RetrieveHeader(i, m);

	if (m->Date <= LastMailCheckTime) continue; //это письмо пришло после последней проверки? 

	m->Clear();

	POP3->Retrieve(i, m); //получаю письмо

	bool HasFile = false;  //флаг наличия вложения

	for (int i = 0; i < m->MessageParts->Count; i++){
		if(!(m->MessageParts->Items[i]->FileName.IsEmpty())) break;} // есть минимум 1 вложенный файл
                   HasFile=true;
 
	if (!HasFile) continue; //письмо без вложения  - пропускаю его
	
        if (m->From->Address==Email) continue; //письмо из "Отправленных" (gmail)
	
	for (int i = 0; i < m->MessageParts->Count; i++) { //сохраняю все вложения 
		if (m->MessageParts->Items[i]->FileName.IsEmpty()) continue; //эта часть письма не файл

		TIdAttachment * a = (TIdAttachment*) m->MessageParts->Items[i];
		String afilename = CurrentFileFolder+a->FileName;

		TEncoding * e = TEncoding::GetEncoding("utf-8"); //определяю кодировку 
		int LOffset=TEncoding::GetBufferEncoding(a->FileName.BytesOf(),e); 

		if(LOffset==0)//это не utf-8, ввожу имя файла по умочанию
		afilename = CurrentFileFolder+"Входящий_файл_"+IntToStr(Random(100))+ExtractFileExt(afilename); // :(((((((
		
                a->SaveToFile(afilename); //сохраняю
		
               delete a;
		}

Вроде не где не успел "попортить" название файла