如何在DELPHI中使用Unicode转换值在字符串中获取单个阿拉伯字母?

前端之家收集整理的这篇文章主要介绍了如何在DELPHI中使用Unicode转换值在字符串中获取单个阿拉伯字母?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑这个由3个字母组成的阿拉伯语单词(جبل).

– 第一个字母是ج,
-name是(ǧīm),
– 当它在开始时,Unicode值是FE9F,
– 基本值是062C和
-its isolated值为FE9D,但最后两个值返回相同的形状绘制ج.

现在,每当我尝试将它作为单个字符 – 以多种不同的方式 – 时,Delphi返回基本的Unicode值.
好吧,这是有道理的,但是转化后的char会发生什么?它也是一个单独的字符..看起来它只在字符串中使用转换后的值,但在哪里?如何提取它?什么时候和哪个过程决定这些值?
主要问题:
如何获取字母表中的阿拉伯字母或其Unicode值?

仅供参考:与其英文字母(大写和小字母)有两种情况不同,阿拉伯语有四种情况(隔离,开始,中间和结束),也有不同的规则.

解决方法

@H_403_18@ 我不确定我理解这个问题.如果你想知道如何用Delphi源代码编写 U+FE9F,在Delphi的现代Unicode版本中.这样做只是这样:
Char($FE9F)

如果你想从جبل中读取单个字符,那么就这样做:

const
  MyWord = 'جبل';
var
  c: Char;
....
c := MyWord[1];//this is U+062C

请注意,上面的代码适用于您的特定单词,因为每个代码点都可以使用单个UTF-16 WideChar字符元素进行编码.如果代码点需要多个元素,那么最好转换为UTF-32进行代码点级处理.

现在,让我们看看你在问题中包含的字符串.我使用wget下载了这个问题,导线下的文件是UTF-8编码的.我使用记事本转换为UTF16-LE,然后挑出字符串的三个UTF-16字符.他们是:

U+062C
U+0628
U+0644

你说:

The first letter is جـ,name is (ǧīm),its Unicode value is U+FE9F.

但这完全是错误的.从上面可以看出,你发布的实际角色是U 062C.因此,您尝试读取第一个字符U062C的原因是U 062C确实是您字符串的第一个字符.

最重要的是,您的Delphi代码中没有任何内容可以改变您的角色.当你这样做时:

S[1] := Char($FE9F);

编译器执行简单的双字节复制.没有发生上下文感知的转换.同样在阅读S [1]时.

让我们看看这些字符是如何显示的,在包含备忘录控件的VCL表单应用程序上使用这个简单的代码

Memo1.Clear;
Memo1.Lines.Add(StringOfChar(Char($FE9F),2));
Memo1.Lines.Add(StringOfChar(Char($062C),2));

输出如下:

如您所见,渲染层知道如何处理出现在字符串开头的U 062C字符.

猜你在找的Delphi相关文章