BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:READ
X-IRMC-BOX:INBOX
X-NOK-DT:20080514T175100Z
X-MESSAGE-TYPE:DELIVER
BEGIN:VCARD
VERSION:3.0
N:
TEL:* //номер телефона. Я ессно сам убрал.
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:14.05.2008 17:51:00
5B //текст сообщения
END:VBODY
END:VENV
END:VMSG
UTF-16LE в Windows-1251
Есть чудная прога Nokia PC Suite, которая умеет делать копию СМСок и Телефонной книги. Но делает она это своим путём т.е. созхраняет каждый контакт в отдельный файл (*.vcf) и каждую СМС в отдельный файл (*.vmg).
Пока не будем рассуждать о телефонной книге и поговорим о СМСках.
Формат файла отдалённо напоминает XML и выглядит примерно так:
Код:
А теперь ближе к сути:
Есть идея, написать прогу, для самого себя, которая будет автоматом разбирать все файлики СМСок. Выдирать из них необходимую инфу (дату/время, № тел. получателя, текст сообщения). Вставлять выдранную инфу в один, целевой файл - *.xls, к примеру.
Проблемы:
1. Файл в кодировке UTF-16LE
2. В заголовке файла нет метки BOM (вроде так...), которая указывала бы, что это Юникод вообще.
Кто что посоветует?
Т.е. вопрос на данный момент сводятся к следующему:
Как перегнать файл из UTF-16LE в Windows-1251, при том, что в заголовке не указано, что это Юникод.
Если, я таки, осилю написать это всё, ессно исходниками/результатом поделюсь с широкой общественностью.
ЗЫ Файлик для интересующихся прикрепляю. Единственное, что сделал внутри него в хексе подчистил номер телефона. Текст СМС, если интересно - "Нет". Без ковычек ессно.
ЗЗЫ Аналогов в инете нет, а те, что есть с кириллицей дружить не хотят :(
В Windows есть функция IsTextUnicode() для предсказания вероятности "юникодности" данного текста. Перегон думается мне WideCharToMultiByte(1200,...)
Цитата: Phodopus
В Windows есть функция IsTextUnicode() для предсказания вероятности "юникодности" данного текста. Перегон думается мне WideCharToMultiByte(1200,...)
Что это юникод, это и так ясно... В спецификации написанно, что это UTF-16LE, но вот без заголовка файла - открыть файл, как текстовой у мя не выходит... К тому же 16 юникод, координально отличается от 8-го... И не факт, что WideCharToMultiByte будет работать с 16-ым :(
Цитата: Abadonne
ЗЗЫ Аналогов в инете нет, а те, что есть с кириллицей дружить не хотят :(
значит главная прболема в том чтобы подружить имеющиеся методы с киррилицей? давай-ка сюда свои наработки (т.е. те методы, которые ты нашёл)
Цитата: ahilles
значит главная прболема в том чтобы подружить имеющиеся методы с киррилицей? давай-ка сюда свои наработки (т.е. те методы, которые ты нашёл)
)))) Так там готовый екзешник, без исходников...
Завть его "ABC Amber Nokia Converter".
Прямую ссылку давать не буду - Гугл те в помощь :)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
str:array[0..500] of Char ;
str2:string;
f:THandle;
D:DWORD;
begin
f:=CreateFile('F:\sms.txt',GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if f=INVALID_HANDLE_VALUE then exit;
ReadFile(f,str,500,D,0);
str2:=WideCharToString(@str);
Memo1.Text:=str2;
end;
var
str:array[0..500] of Char ;
str2:string;
f:THandle;
D:DWORD;
begin
f:=CreateFile('F:\sms.txt',GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if f=INVALID_HANDLE_VALUE then exit;
ReadFile(f,str,500,D,0);
str2:=WideCharToString(@str);
Memo1.Text:=str2;
end;
Бу на выходных кодить :)
Цитата: Abadonne
Что это юникод, это и так ясно... В спецификации написанно, что это UTF-16LE, но вот без заголовка файла - открыть файл, как текстовой у мя не выходит... К тому же 16 юникод, координально отличается от 8-го... И не факт, что WideCharToMultiByte будет работать с 16-ым :(
Цитата: Abadonne
Как перегнать файл из UTF-16LE в Windows-1251, при том, что в заголовке не указано, что это Юникод.
Ну если тебе и так ясно что это юникод - тогда добавить правильный заголовок - ноль проблем!
WideCharToMultiByte изначально и работала с 16-м, а уж только потом - с 8-м