Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > UTF8


Автор: RapMan 13.9.2008, 18:24
Доброе время суток!
У меня есть буффер в котором содаржиться массив символов UTF8 (тоесть символ - по два байта) как мне сделать с етого массива, другой массив только уже с Ansi ? хорошо если б для хранения использовалась та жа переменная массива
массив:
Код

A: array [0..100] of Char;

Зарание спасибо

Автор: Matematik 13.9.2008, 20:15
Код

var
  A : array [0..100] of Char;
  B : UTF8String;
  C : string;
begin
  {...}
  B := A; // записать массив в строку
  C := Utf8ToAnsi(B); // UTF8 в Ansi
end;

Автор: RapMan 13.9.2008, 22:47
проблема в том что входящий массив похож на ето:
6D 00 A6 00 67 00
когда делаю Utf8ToAnsi - то она берет только символ 6D ('m') и  возращает только его, почему?

Автор: aktuba 13.9.2008, 23:29
Цитата(RapMan @  13.9.2008,  23:47 Найти цитируемый пост)
проблема в том что входящий массив похож на ето:
6D 00 A6 00 67 00
когда делаю Utf8ToAnsi - то она берет только символ 6D ('m') и  возращает только его, почему? 

Вообще, насколько помню, должно быть наоборот, т.е. 00 6D 00 A6 00 67. 00 впереди означает, что это ANSI-символ, т.е. латинский ;)

Автор: RapMan 13.9.2008, 23:36
aktuba, сделал как Вы говорили - в результате возращает пустоту... почему?

Автор: Matematik 13.9.2008, 23:40
Цитата(RapMan @ 13.9.2008,  22:47)
проблема в том что входящий массив похож на ето:
6D 00 A6 00 67 00
когда делаю Utf8ToAnsi - то она берет только символ 6D ('m') и  возращает только его, почему?

Может это потому что 6D 00 A6 00 67 00 не UTF-8
UTF-8 и unicode string - не одно и тоже.

Код

procedure TForm1.btn2Click(Sender: TObject);
var
  A : array [0..100] of Char;
  B : WideString;
  C : AnsiString;
begin
  FillChar(a, Length(a), #00);
  a[0] := #$6D;
  a[1] := #$00;
  a[2] := #$A6;
  a[3] := #$00;
  a[4] := #$67;
  a[5] := #$00;
  SetLength(B, Length(A) div 2);
  CopyMemory(Pointer(B), @A[0], Length(A) div 2);
//  B := A;
  C := B;
  ShowMessage(a);  // m
  ShowMessage(b);  // m¦g
  ShowMessage(c);  // m¦g
end;


Автор: RapMan 13.9.2008, 23:49
Matematik, Большое спасибо, а как сделать чтобы вместо AnsiString был массив? а то в строке может быть символы которые превращаються в "?"
Зарание спасибо!

Автор: RapMan 14.9.2008, 12:36
Пол ночи потратил - ниче толком не вышло  smile 
У меня есть массив:
76 04 63 00 5E 04 36 04 23 04
мне нужно достать String, как я заметил такой же массив есть в ресурсах (тоесть если строку положыть в ресурсы - то будет подобный массив) - вопрос простой Как Дельфи преобразует данный массив в строку когда достает ее с ресурсов?
Зарание очень благодарен!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)