Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringReplace не работает для строки в Unicode


Страницы:   1 2

Reals ©   (2007-08-05 15:01:00) 

Здравствуйте!

Действия следующие: из бинарного файла, читается определенное количество байтов и помещается в переменную String. Считанные данные находятся в кодировке Unicode. Теперь мне нужно удались символы нулевого значения Chr(0), а StringReplace не хочет заменять этот символ, кстати и вообще никакое символ не заменяется. В чем может быть причина, помогите пожалуйста разобраться.
Может можно просто сконвертировать переменную String из Unicode в  другую кодировку? Если да, то как?

P.S. Для замены исползую так StringReplace(tmp, Chr(0), '', [rfReplaceAll]); и так StringReplace(tmp, #0, '', [rfReplaceAll]);

Заранее премного благодарен!


Loginov Dmitry   (2007-08-06 07:46:00) [1]

StringReplace не работает из-за вызова SysUtils.AnsiStrPos, которая ориенрируется на символ #0.


Reals   (2007-08-06 02:28:00) [2]

Спасибо всем огромное, кое-какие продвижения есть... буду разбираться дальше.

Удачи!


Sdubaruhnul   (2007-08-06 00:27:00) [3]

На всякий случай библиотека функций для работы с Юникодом:
http://www.soft-gems.net/index.php?option=com_content&task=view&id=23&Itemid=33


Anatoly Podgoretsky   (2007-08-05 23:24:00) [4]

> Reals  (05.08.2007 23:20:28)  [28]

С этого надо было и начинать

S := WS

и все


Reals   (2007-08-05 23:20:00) [5]


> Anatoly Podgoretsky ©   (05.08.07 23:15) [27]

так мне не нужно изменять двоичный файл, мне просто нужно прочитать из него этот заголовок и вывести в Memo.


Anatoly Podgoretsky   (2007-08-05 23:15:00) [6]

> Reals  (05.08.2007 23:06:26)  [26]

Удаление ряда символов (байтов) из двоичного файла наверняка привед к его порче.
Буквы и так слитны, они просто в Юникод.


Reals   (2007-08-05 23:06:00) [7]

Спасибо огромною за помощь.
Действительно я смутно представляю что такое Юникод, и в программировании ни разу не приходилось его обрабатывать.
Меня интересует только выше стоящая задача, как из выше приведенного бинарного файла, вырезать часть кода и удались #0 символы. Если вы загляните внутрь файла вы увидите там название альбома "The Only Reason", между каждой буквой стоит нулевой символ. Вот мне необходимо вырезать этот кусочек, индексы начала и конца этой записи мне известны, и убрать нулевой символ, чтобы все буквы были слитно.
В цикле, как предложил Плохиш ©   (05.08.07 22:11) [17]не помогло.

Почему я решил что строка в Юникоде, так как вырезаный кусок у меня сохряняетсяв файле, когда я этот файл просматриваю в кодировке Unicode то этих нулевых символов нет, и все буквы в строке слитно.


MetalFan   (2007-08-05 23:04:00) [8]

а, сорь) просто не сразу догнал смысл Вашей фразы)))


Anatoly Podgoretsky   (2007-08-05 22:52:00) [9]

Автор смутно представляет, что такое Юникод и как с ним работать.


Anatoly Podgoretsky   (2007-08-05 22:51:00) [10]

Не ты ли приводил "#0#0 на #0#32", вот теперь представь это только наоборот, для Юникода, с которым так пообращаются, не по твоему коду конечно, а по автору, который предложил заменить байты 0 на что ни будь, кроме разрушения ничего хорошего не будет.


MetalFan   (2007-08-05 22:42:00) [11]


> Anatoly Podgoretsky ©   (05.08.07 22:39) [21]

ммм... не "вкурил"))


Anatoly Podgoretsky   (2007-08-05 22:39:00) [12]

> MetalFan  (05.08.2007 22:19:18)  [18]

А спрашивает про байты с кодом #0 - это разрушение.


Anatoly Podgoretsky   (2007-08-05 22:38:00) [13]

> Reals  (05.08.2007 22:05:16)  [16]

StringReplace


Anatoly Podgoretsky   (2007-08-05 22:38:00) [14]

> Плохиш  (05.08.2007 21:55:15)  [15]

Не все, но многие.
А вот Юникодом в коде и не пахнет.


MetalFan   (2007-08-05 22:19:00) [15]


> расчитанные на AnsiString, обрабатывают строку до первого
> символа #0

не совсем, имхо, верно... AnsiString для совместимости с PChar конечно оканчивается #0, но функции для работы именно с AnsiString ориентируются скорее на Length(), чем на #0...
и по поводу топика... если нужна только замена #0#0 на #0#32 (пробел в юникоде), то проще наверное самому написать элементарный цикл


Плохиш   (2007-08-05 22:11:00) [16]


> Reals ©   (05.08.07 22:05) [16]
>
> > Плохиш
>
> Так вот как бы мне из этого набора байтов удались символы
> с кодом #0?

В цикле...


Reals   (2007-08-05 22:05:00) [17]


> Плохиш

Так вот как бы мне из этого набора байтов удались символы с кодом #0?


Плохиш   (2007-08-05 21:55:00) [18]


> Reals   (05.08.07 20:20) [12]
> А кто говорил что я чего-то хочу от WideString?

Символ #0 является ограничителем в AnsiString, поэтому все функции, расчитанные на AnsiString, обрабатывают строку до первого символа #0.^

> Reals ©   (05.08.07 20:47) [14]

В приведённом куске файла юникодом и не пахнет, простой набор байтов...


Reals   (2007-08-05 20:47:00) [19]

вот кусочек файла, из которого нужно прочитать определенное количество байтов и обработать куcочек строки.

http://realsweb.com/file.bin


> Anatoly Podgoretsky

Строка прочитана из файла, который в кодировке Unicode. Если вы видите что я чего-то не допонимаю, то объясните пожалуйста. Так как ниразу не приходилось пользоваться WideString`ами.


Anatoly Podgoretsky   (2007-08-05 20:27:00) [20]

> Reals  (05.08.2007 20:20:12)  [12]

Что такое строка в Юникод


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо