Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировки, UCS2 в Unicode и братно. 
:(
    Опции темы
Control
Дата 3.7.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ув. Всесильные ГУРУ.
Помогите решить следующую проблемму. Написал клиента по приёму-передаче смс сообщений, когда текст на клиента приходит латинскими буквами, всё здорово работает, но стоит только отослать сообщение кириллицей, приходит какая-то жуткая строка по всей видимости в кодировке UCS2. 
Таким образом отправленное в 8 битной кодировке слово текст выглядит полученном варианте как B5:AB 

Пожалуйсто, если Вам не трудно приведите пример функции на входе которой можно написать слово в  кодировке UCS2 а на выходе она вернёт содержимое преобразованное в UTF8, Unicode и наоборот;

Возможно существует готовый компонент занимающийся этим.
За ранее благодарю. 
PM MAIL   Вверх
comtat
Дата 3.7.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

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



Код
Function UCS2ToString(s:String):String;
Var i   : Integer;
    wc  : PWideChar;
    c   : Char;
Begin
 Result:='';
 i:=1;
 While i<=Length(s)-1 do
   Begin
     c:=s[i];
     s[i]:=s[i+1];
     s[i+1]:=c;
     Inc(i,2);
   End;
 s:=s+#0;
 wc:=@s[1];
 Result:=WideCharToString(wc);
End;


Чета типа того .. smile 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
AriX
Дата 3.7.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В догонку: есть компонент.
Unicode Library - http://soft-gems.net/UnicodeLibrary.php
Тока не знаю, работает ли он с UCS2. 
PM MAIL   Вверх
Control
Дата 3.7.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



comtat Дружище, огромное спасибо, всё работает ! smile 
А можно ещё такую-же функцию, только наоборот из сторки в UCS2 ? За ранее БОЛЬШОЕ спасибо ! 
PM MAIL   Вверх
Control
Дата 3.7.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это получается с каждым последующим символом на 2 бита сдвигать нужно да ? 
PM MAIL   Вверх
Girder
Дата 6.7.2006, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



Цитата(Control @  3.7.2006,  18:50 Найти цитируемый пост)
А можно ещё такую-же функцию, только наоборот из сторки в UCS2 ? За ранее БОЛЬШОЕ спасибо !
Воспользуйся MLang.dll

PS: http://forum.vingrad.ru/index.php?act=Search&f=2
 


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
CrazyIvan
Дата 14.7.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот, взял с MotoFan, перекодировка туда-обратно.
Код

function UCSToAnsi(s:string):string;

function FMT(C:string):Char;
var i:integer;
begin
 i := StrToIntDef('$'+C,0);
 case i of
  1040..1103: i := i - 848;
  1105      : i := 184;
 end;
 Result := Chr(i);
end;

var C:integer;
   I:integer;
begin
Result := '';
C := Length(S) div 4;
For i:=0 to C-1 do
 Result := Result + FMT(Copy(S,i*4+1,4));
end;

function AnsitoUCS(S:string):string;

function FMT(C:Char):string;
var i:integer;
begin
 Result := '';
 i := ord(C);
 case i of
  192..255 : i := i + 848;
  184      : i := 1105;
 end;
 result := inttohex(i,4)
end;

var C:integer;
   I:integer;
begin
Result := '';
C := Length(S);
For i:=1 to C do
 Result := Result + FMT(S[i]);
end;
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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