Delphi 获取字符串中的中间/开头/结尾阿拉伯字符
大多数阿拉伯字母都有多种上下文形式,例如后者具有通用unicodeDelphi 获取字符串中的中间/开头/结尾阿拉伯字符,delphi,unicode,firemonkey,Delphi,Unicode,Firemonkey,大多数阿拉伯字母都有多种上下文形式,例如后者具有通用unicode0628 但如果后者出现在单词的开头,将采用这种形式unicodeFE91 中间=unicodeFE92 词尾=unicodeFE90 我试图得到字符代码,但我总是得到通用的unicode procedure TfMain.btn2Click(Sender: TObject); const Str = 'يبداء'; Ch = 'ب'; begin ShowMessage(IntToHex(Ord(Ch
0628
但如果后者出现在单词的开头,将采用这种形式unicodeFE91
中间=
unicodeFE92
词尾=
unicodeFE90
我试图得到字符代码,但我总是得到通用的unicode
procedure TfMain.btn2Click(Sender: TObject);
const
Str = 'يبداء';
Ch = 'ب';
begin
ShowMessage(IntToHex(Ord(Ch), 4)); // return 0628 - Correct
ShowMessage(IntToHex(Ord(Str[2]), 4)); // return 0628 - Wrong
end;
问:如何根据字符在单词中的位置获得正确的字符代码
更多信息
我现在把这个想法作为一个完整的解决方案 下面的函数将根据其在传递字符串中的位置,从U形表返回正确的字符 此函数将阿拉伯语语法考虑在内 用法/输出如下所示:
procedure TfMain.btn2Click(Sender: TObject);
const
cMiddle = 'يبداء';
cBeginning = 'بداء';
cEnd1 = 'ألعاب';
cEnd2 = 'سحب';
begin
ShowMessage(IntToHex(Ord(_GetArabicChar(cMiddle, 2)), 4)); // return FE92
ShowMessage(IntToHex(Ord(_GetArabicChar(cBeginning, 1)), 4)); // return FE91
ShowMessage(IntToHex(Ord(_GetArabicChar(cEnd2, Length((cEnd2)))), 4));// return FE90
ShowMessage(IntToHex(Ord(_GetArabicChar(cEnd1, Length((cEnd1)))), 4));// return 0628
end;
我怀疑你的代码工作正常。显示的字符串确实包含字符代码0628,因此读取
Ord(Str[2])
可以得到该值。文本渲染器根据上下文对该字符代码进行不同的解释。当它出现在一个单词的末尾时,它会显示为fe90。另一方面,字符fe90-2是获取上下文相关字形的方法,而不考虑周围的上下文。也就是说,无论字符串
变量中的相邻位置中有哪些其他字符代码,字符fe90都将显示为字尾图示符。可能的
procedure TfMain.btn2Click(Sender: TObject);
const
cMiddle = 'يبداء';
cBeginning = 'بداء';
cEnd1 = 'ألعاب';
cEnd2 = 'سحب';
begin
ShowMessage(IntToHex(Ord(_GetArabicChar(cMiddle, 2)), 4)); // return FE92
ShowMessage(IntToHex(Ord(_GetArabicChar(cBeginning, 1)), 4)); // return FE91
ShowMessage(IntToHex(Ord(_GetArabicChar(cEnd2, Length((cEnd2)))), 4));// return FE90
ShowMessage(IntToHex(Ord(_GetArabicChar(cEnd1, Length((cEnd1)))), 4));// return 0628
end;