Re: UTF8 Приблуда - нащо?
Так є ж спеціальні методи і типи даних для роботи з UTF8
http://docwiki.embarcadero.com/RADStudi … n_Routines
http://docs.embarcadero.com/products/ra … rings.html
System.WideStrUtils.UTF8CharLength
System.WideStrUtils.UTF8CharSize
http://docwiki.embarcadero.com/RADStudi … s_(Delphi)
UnicodeString
WideString
Я не знаю delfi 7 Delphi 7 тому наведу приклад в C++Builder XE8, це все легко робиться (у віконних програмах)
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
UnicodeString Str1 = Edit1->Text;
unsigned int Str1Length = Str1.Length();
for(int i=1;i<=Str1Length; i++)
RichEdit1->Lines->Add(L"Рядок " + IntToStr( i ) + ") " + Str1[i]);
//Str1[i] - оперування посимвольно
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
RichEdit1->Lines->Add(L"Розмір рядка: " +
IntToStr (Edit1->Text.Length()) + L" символи");
//визначення довжини [s]стрічки[/s] рядка
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
UnicodeString Str1 = Edit1->Text;
unsigned int Str1Length = Str1.Length();
for(int i=1;i<=Str1Length; i++)
RichEdit1->Lines->Add(L"Байти символа " +
IntToStr( i ) + ") " +
IntToHex(Str1[i],4)
);
//IntToHex(Str1[i],4) - масив байт (конвертування в рядок)
}
//---------------------------------------------------------------------------
Демонстрація результату
https://drive.google.com/open?id=1rDvBX … fpxzfpTwQu
по перше великий розмір даних
Текст, що складається тільки з символів, коди яких менші ніж 128, при записі в UTF-8 перетворюється на звичайний текст ASCII., об'єм даних збільшується тільки тоді, коли використовуються символи що не ввійшли у ASCII