如何在DELPHI中使用Unicode转换值在字符串中获取单个阿拉伯字母
考虑这个由3个字母组成的阿拉伯语单词(???).
– 第一个字母是?, 现在,每当我尝试将它作为单个字符 – 以多种不同的方式 – 时,Delphi返回基本的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 你说:
但这完全是错误的.从上面可以看出,你发布的实际角色是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字符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |