|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.06.2012, 18:05 | #1 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 55
|
Unicode и UTF-16
Здравствуйте.
Помогите разобраться с задачей. Описание задачи: "Задания хранятся в файле виде нуль-терминированных строк в кодировке Unicode (2 байта) Первое задание ищется по сигнатуре "Task0" (кодировка UTF-16)" и так далее... Вопрос. Описание корректно? В смысле, как совместить Unicode и UTF-16. Если корректно, то как именно выделить из файла первое задание? Прошу заранее простить, если что неясно, так как это неясно мне самому. |
22.06.2012, 18:24 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Думаю, для Вашей задачи можно считать, что Unicode и UTF-16 - это одно и то же.
|
22.06.2012, 18:39 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
UTF==Unicode Transformation Format
то есть любой UTF уже юникод. а учитывая что у вас винда, то там широкие строки итак в UTF8, любая ДЕлфи начиная с 2009(может и ниже, не помню) и так работает с юникодом. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
22.06.2012, 18:40 | #4 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 55
|
Спасибо за ваши ответы.
Текст из файла я прочитал: Код:
Поэтому и возник вопрос. Задача получена через вторые руки, поэтому непонятно, корректно ли описание. Или я что-то не так сделал. Кстати, у меня Delphi-7. Последний раз редактировалось AndrzejX; 22.06.2012 в 18:43. |
23.06.2012, 00:01 | #5 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Цитата:
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
23.06.2012, 19:00 | #6 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
veniside, обратите внимание на оператор resеt.
CountWideChar уже выражен в длинах WideChar. Вот если бы было reser(..., 1); тогда бы Ваше замечание имело смысл. Цитата:
Тем более, что veniside намекнул Вам, что в файле с расширением exe, в общем-то, и нет никаких оснований быть подобной строке. А если она там даже есть, совершенно неочевидно, что ее можно обнаружить приведенным способом. Последний раз редактировалось s-andriano; 23.06.2012 в 19:06. |
|
24.06.2012, 01:17 | #7 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Цитата:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
24.06.2012, 09:28 | #8 | ||||||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...господа форумчане: нас пытаются нае....ть, мягко говоря. Поясню: либо текущий TC - AndrzejX есть клон товарища Глеб1991 из темы фриланса "передача данных" http://programmersforum.ru/showthread.php?t=205886, либо этот TC нашими руками денег себе зарабатывает ...либо его также нае....т.
Аргументы и факты 1- Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||||||
24.06.2012, 09:28 | #9 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...не влезло.
3- присланное описание задание: Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 24.06.2012 в 09:36. |
|
24.06.2012, 09:43 | #10 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Ну, что делать - совместимость с ОС CP/M-80. В ней длина файла задавалась не в байтах, как в более поздней MS DOS, а в секторах. А сектора тогда были маленькими (8-дюймовые дискеты одинарной плотности) - 128 байт. Отсюда берет свое начало и столь "странная" для DOS длина по умолчанию.
AndrzejX, по поводу Вашей задачи. Вы не удосужились написать, что именно Вам нужно, поэтому приходится догадываться. Если предположить, что у Вас есть *.exe файл, и Вам нужно на1йти в нем строку, которая, достоверно известно, закодирована в Юникоде, то Вы делаете несколько ошибок. Чтобы решить такую задачу, следует учесть, что: 1. Далеко не усе двухбайтовые комбинации являются символами UTF-16. Следовательно, при обработке произвольной последовательности функция преобразования попросту может "заткнуться" на недопустимом коде. 2. UTF-16 содержит не только 2-байтовые символы, но и 4-байтовые. Следовательно, при разборе произвольной последовательности может быть пропущена часть 2-байтовых комбинаций. 3. Даже при благоприятном стечении обстоятельств пол п.п. 1-2 чтобы найти последовательность тем методом, которым Вы пытаетесь, смещение юникодной строки в файле должно быть четным. Поэтому, если Вам нужно найти юникодную строке в произвольном бинарном файле, то действовать нужно следующим образом: 1. Файл читается как байтовый. 2. Юникодная строка рассматривается как последовательность байтов. Например, "Task0" будет занимать 12 байтов (вместе с завершающим 0). Вот эту байтовую последовательность и нужно искать в файле. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразовние Utf-16 <=> Utf-8 | hard-t | Общие вопросы C/C++ | 1 | 26.08.2011 13:54 |
UTF 16 | Federal | Помощь студентам | 5 | 29.12.2010 00:30 |
Ansi в UTF-8 и наоборот UTF-8 в Ansi | Alar | Работа с сетью в Delphi | 3 | 09.12.2010 17:02 |
from utf-8 to unicode | artush1984 | Общие вопросы C/C++ | 7 | 04.09.2009 19:44 |