加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:05:28 所属栏目:大数据 来源:网络整理
导读:考虑这个由3个字母组成的阿拉伯语单词(???). – 第一个字母是?, -name是(?īm), – 当它在开始时,Unicode值是FE9F, – 基本值是062C和 -its isolated值为FE9D,但最后两个值返回相同的形状绘制?. 现在,每当我尝试将它作为单个字符 – 以多种不同的方式 – 时,
考虑这个由3个字母组成的阿拉伯语单词(???).

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

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

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

解决方法

我不确定我理解这个问题.如果你想知道如何用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字符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读