Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6482
Последний выпуск: 19.06.2015

UTF-16LE в Windows-1251

8.9K
26 июня 2008 года
Abadonne
26 / / 26.01.2006
Итак вводная.
Есть чудная прога Nokia PC Suite, которая умеет делать копию СМСок и Телефонной книги. Но делает она это своим путём т.е. созхраняет каждый контакт в отдельный файл (*.vcf) и каждую СМС в отдельный файл (*.vmg).
Пока не будем рассуждать о телефонной книге и поговорим о СМСках.
Формат файла отдалённо напоминает XML и выглядит примерно так:

Код:
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


А теперь ближе к сути:
Есть идея, написать прогу, для самого себя, которая будет автоматом разбирать все файлики СМСок. Выдирать из них необходимую инфу (дату/время, № тел. получателя, текст сообщения). Вставлять выдранную инфу в один, целевой файл - *.xls, к примеру.

Проблемы:
1. Файл в кодировке UTF-16LE
2. В заголовке файла нет метки BOM (вроде так...), которая указывала бы, что это Юникод вообще.

Кто что посоветует?

Т.е. вопрос на данный момент сводятся к следующему:
Как перегнать файл из UTF-16LE в Windows-1251, при том, что в заголовке не указано, что это Юникод.

Если, я таки, осилю написать это всё, ессно исходниками/результатом поделюсь с широкой общественностью.

ЗЫ Файлик для интересующихся прикрепляю. Единственное, что сделал внутри него в хексе подчистил номер телефона. Текст СМС, если интересно - "Нет". Без ковычек ессно.

ЗЗЫ Аналогов в инете нет, а те, что есть с кириллицей дружить не хотят :(
14
27 июня 2008 года
Phodopus
3.3K / / 19.06.2008
В Windows есть функция IsTextUnicode() для предсказания вероятности "юникодности" данного текста. Перегон думается мне WideCharToMultiByte(1200,...)
8.9K
27 июня 2008 года
Abadonne
26 / / 26.01.2006
Цитата: Phodopus
В Windows есть функция IsTextUnicode() для предсказания вероятности "юникодности" данного текста. Перегон думается мне WideCharToMultiByte(1200,...)



Что это юникод, это и так ясно... В спецификации написанно, что это UTF-16LE, но вот без заголовка файла - открыть файл, как текстовой у мя не выходит... К тому же 16 юникод, координально отличается от 8-го... И не факт, что WideCharToMultiByte будет работать с 16-ым :(

251
27 июня 2008 года
ahilles
1.5K / / 03.11.2005
Цитата: Abadonne

ЗЗЫ Аналогов в инете нет, а те, что есть с кириллицей дружить не хотят :(


значит главная прболема в том чтобы подружить имеющиеся методы с киррилицей? давай-ка сюда свои наработки (т.е. те методы, которые ты нашёл)

8.9K
28 июня 2008 года
Abadonne
26 / / 26.01.2006
Цитата: ahilles
значит главная прболема в том чтобы подружить имеющиеся методы с киррилицей? давай-ка сюда свои наработки (т.е. те методы, которые ты нашёл)



)))) Так там готовый екзешник, без исходников...
Завть его "ABC Amber Nokia Converter".
Прямую ссылку давать не буду - Гугл те в помощь :)

251
28 июня 2008 года
ahilles
1.5K / / 03.11.2005
вот код, который считывает твой файл в MEMO. Проблем с киррилицей нет.
Код:
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;
8.9K
28 июня 2008 года
Abadonne
26 / / 26.01.2006
Спасибо большое.
Бу на выходных кодить :)
14
30 июня 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: Abadonne
Что это юникод, это и так ясно... В спецификации написанно, что это UTF-16LE, но вот без заголовка файла - открыть файл, как текстовой у мя не выходит... К тому же 16 юникод, координально отличается от 8-го... И не факт, что WideCharToMultiByte будет работать с 16-ым :(



Цитата: Abadonne
Как перегнать файл из UTF-16LE в Windows-1251, при том, что в заголовке не указано, что это Юникод.



Ну если тебе и так ясно что это юникод - тогда добавить правильный заголовок - ноль проблем!

WideCharToMultiByte изначально и работала с 16-м, а уж только потом - с 8-м

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог