PDA

View Full Version : سوال: تبدیل کدهای unicode به حروف فارسی



pad_kay
پنج شنبه 10 مرداد 1392, 21:16 عصر
با سلام
به نظر شما چه طور می شه کدهای به شکل زیر رو به معادلش تبدیل کرد :
البته باید کلیه یونی کد رو ساپورت کنه ا حداقل فارسی (عربی)
\u0635
با تشکر

arash_ebrahimi_nk
جمعه 11 مرداد 1392, 09:06 صبح
سلام
اون
u\
رو نمیدونم چیه، ولی در کل یه حرف یونیکد یک Word هست که از دو بایت تشکیل شده و شما میتونید بایت ها رو پشت سر هم بچینید و با کد زیر اون رو تبدیل کنید
مثلاً کلمه "آرش" رو در نظر بگیرید، اگه بایت هاش رو پشت سر هم بچینید به این صورت میشه (به صورت hex):
220631063406
حالا میتونید این اعداد رو در یک متغیر TBytes نگه داری بکنید (مثلا با نام rwB) و بعد از طریق کُد زیر اون رو تبدیل کنید:
S := TEncoding.Unicode.GetString(rwB)

pad_kay
جمعه 11 مرداد 1392, 16:43 عصر
با سلام و تشکر از شما عزیز
من در سوال فراموش کردم ورشن دلفی رو بگم و تبدیل رو برای دلفی 7 لازم دارم
اگر امکانش هست راهنمایی کنید
با تشکر

arash_ebrahimi_nk
یک شنبه 13 مرداد 1392, 19:21 عصر
راهنمایی اینکه میتونید یه ورژن لایت از دلفی های جدید رو نصب کنید و کُدهاش رو نگاه کنید.

یوسف زالی
یک شنبه 13 مرداد 1392, 21:02 عصر
u یعنی یونیکد.
راهش اینه که بیایید و هر کدوم از کاراکترها رو جداجدا کنید و دی کد کنید.


function HexChar(Ch: char): Byte;
begin
case UpCase(Ch) of
'0'..'9': Result := Byte(Ch) -Byte('0');
'A'..'F': Result := Byte(Ch) -Byte('A') +10;
end;
end;

function HexWord(Wrd: string): WideChar;
begin
Wrd := UpperCase(Wrd);
Wrd := RightStr('0000' + Wrd, 4);

Result := WideChar(
(HexChar(Wrd[1]) shl 12) +
(HexChar(Wrd[2]) shl 8) +
(HexChar(Wrd[3]) shl 4) +
HexChar(Wrd[4])
);
end;

function UnicodeToStr(s: string): string;
var
lst: TStringList;
i: integer;
begin
lst := TStringList.Create;
lst.Text := StringReplace(s, '\u', #13, [rfReplaceAll, rfIgnoreCase]);
lst.Delete(0);

Result := '';
for i := 0 to lst.Count -1 do
Result := Result + HexWord(lst[i]);

lst.Free;
end;



مثال:


procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s := '\uFEB2\u0635';

s := UnicodeToStr(s);

ShowMessage(s);
end;

saeidsg
چهارشنبه 14 تیر 1396, 08:19 صبح
سلام برعکس این هم می شه