Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодирование (а точнее декодирование), Траблы с русским текстом 
:(
    Опции темы
HellanD
Дата 16.5.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: нет
Всего: 2



 smile
Привет ВСЕМ! 
Хелп ми плиз!
Расскажу немного про тему работы:
Я создаю программу в среде C++ Bulider выполняющюю помехоустойчивое кодирование (а так же декодирование текстов).
Кодирующая часть уже готова. А вот с декодированием...
Вот в чем суть:
Если скажем переводить текст в цифру (скажем в АСКИ) то его размер значительно растет(ведь одному символу соответствует просто 8 бит)
А созданая программа работает со строками текста. И это означает что при декодировании необходимо узнать где оканчиваеться "оригинальная" строка. Для этого конец каждой кодированой строки уже дополнен флагом типа "01111111" 
После чего строкой кодированого текста считается строка оканчивающаяся флагом
Так вот при работе с англ текстом алгоритм пашет(т.е. исходный закодированый текст был англ), а вот с русским он просто не ищет флаги!!! Не знаю че делать ! Как заставить его искать флаги!!
Посмотрите текст программы:
 void __fastcall TForm1::DecodeClick(TObject *Sender)
{
  String theString="";
  Coder coded;


for(int i=0;i<=Crypted->Lines->Count;i++){

  if(Crypted->Lines->Strings[i].AnsiPos("01111111")==0)
      theString+=Crypted->Lines->Strings[i];

  if(Crypted->Lines->Strings[i].AnsiPos("01111111")!=0)
      theString+=Crypted->Lines->Strings[i]; {
        theString+=Crypted->Lines->Strings[i];
        ShowMessage(theString);
        //coded.setCodeToString(theString);
        //RichEdit_ishodnij->Lines->Add(coded.deASCII());
        theString="";
        }


                                          }





        //RichEdit_ishodnij->Lines->Add(coded.deASCII());
        
          

        
}
//---------------------------------------------------------------------------
 


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
_hunter
Дата 16.5.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



ну так пройдись по коду отладчиком и посмотри в чем именно проблема.
для справки: латинские символы вмещаются в 7 бит; русские -- в 8...
проще, наверное, сначала кодировать текст в Base64... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
HellanD
Дата 16.5.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: нет
Всего: 2



Там суть в том что при тестировании с английскими буквами все ОК. А вот ри переходе на русский не получаеться загрузить в класс точно все символы до флага(с англ вариантом все ОК).
И проблема тут не в колличестве бит а в том что не правильно загружаеться строка. (Загружаеться не до флага!!!! а до конца строки)
(об этом подсказал мне последний ShowMessage smile ) Плиз хелп!!
Кто нибудь!!!!! 


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
ZIlya
Дата 17.5.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.2.2006

Репутация: нет
Всего: нет



Как одна из возможных причин:
при русских символах в закодированной строке может получиться символ с кодом 0 (он же '\0')то есть конец строки и программа считает строку только до него 
PM MAIL   Вверх
_hunter
Дата 17.5.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(HellanD @  16.5.2006,  20:26 Найти цитируемый пост)
И проблема тут не в колличестве бит а в том что не правильно загружаеться строка.

ну так берем дебаггер и смотрим почему она неправильно загружается 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
HellanD
Дата 17.5.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: нет
Всего: 2



Спасибо всем за помощь! Проблему я смог понять и решить:
Она заключалась в том что выбраный флаг "01111111"(см по коду) подходит для англ символов , а вот в русских проблемма возникала например при появлении буквы "я" ("11111111") , в этом случае если перед я стоял код заканчивающийся на 0 то мы получали  лишний флаг!!!!
Я просто изменил флаг на 2- байтный и теперь все ОК!!!!!
Еще раз спасиба за помощь!!!! smile  


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.3827 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.