我必须从xml文件中读取阿拉伯字母并将其显示为单词
输入:سعادة 输出:سعادة看起来像..
我不知道在任何语言中怎么做,要读什么算法,我需要一些起点来完成这项任务
我也不确定我是否添加了正确的标签,请随意进行更改。
答案 0 :(得分:3)
除非你的任务是编写系统GUI级渲染/布局引擎,否则eSniff的回答几乎肯定是不你想要做什么。这种组合的阿拉伯字母将由窗口系统为您完成,如the Wikipedia page上简要说明的那样。在几乎所有情况下,您都应该避免遗留的阿拉伯语演示文稿字符代码点。只需要一个基本的Unicode阿拉伯语代码点字符串,并将它们发送到UI中的文本字段,它们将被正确呈现....
答案 1 :(得分:0)
对于参考:http://en.wikipedia.org/wiki/Arabic_alphabet和http://en.wikipedia.org/wiki/Arabic_characters_in_Unicode
首先,我不太了解阿拉伯语单词形式,我只读了上面的维基百科文档(上面链接)。感谢给我一个阅读它的理由,但请原谅我,如果我完全搞砸了这个: - )......
问题似乎是将char映射到它的正确" case"根据它在这个词中的位置,对吧?我基于您在示例中显示的更改来实现此目的。无论如何,在英语中,这就像上面的第一个字母。在阿拉伯语中,似乎有4个字符案例(开头,中间,结束和隔离)。如果这是正确的,这里是C#中的一个示例,它执行此映射:
class ArabicMapper
{
enum CaseMap{End=0, Middle=1, Beginning=2, Isolated=3};
Dictionary<char, char[]> charMap; // This maps base letters to one of their four cases.
public ArabicMapper()
{
//Create the char map for each letter in the alphabet. {BaseLetter, {End, Middle, Beginning, Isolated}}
charMap = new Dictionary<char, char[]>();
charMap.Add(0627, new char[] { FE8D, 0627, 0627, FE8E }); // ʾalif : Not sure of the rules for middle/beginning, so just using the isolated...
charMap.Add(0628, new char[] { FE90, FE92, FE91, FE8F }); // bāʾ :
//... and so on for each char ...
}
public string charsToWord(char[] word)
{
if (word.Length >= 2)
{
StringBuilder finalWord = new StringBuilder();
for(int i=0; i<word.Length; i++)
{
if (i == 0)
finalWord.Append((charMap[word[i]])[CaseMap.Beginning]);
else if(i == word.Length-1)
finalWord.Append((charMap[word[i]])[CaseMap.End]);
else
finalWord.Append((charMap[word[i]])[CaseMap.Middle]);
}
return finalWord.ToString();
}
else
{
(charMap[word[0]])[CaseMap.Isolated].ToString();
}
}
}
P.S。我没有测试这段代码,所以它可能无法正常工作。请将其视为伪代码。