2011-07-14 29 views
3

我正在从手机接收Devanagri(印地语)脚本中的SMS消息到我的桌面程序,但它正在以编码方式显示数据(例如 - 091A09470924002009240924 ),我发现它是unicode。有没有现成的图书馆可以让我把它转换成印地文?如果不是,我该如何为此编写一个方法?我正在使用C#。如何将unicode编码的数据转换为Devanagri(印地文)文本

+0

只是为了一个音符添加到您的“是unicode”你看到的由两个字节表示Unicode代码点。即你的角色是091A 0947 0924 0020 0924 0924.你可以在http://www.unicode.org/charts/PDF/U0900.pdf看到相应的Devangari代码页。 – borrible

回答

1

使用System.Text.Encoding类。它有方法GetChars(byte [])。也许你会需要一个适当的字体,因为一些印地语符号可以用几种方式写。

1

这是我用于将Georgian unicode转换为其拉丁等效文本的代码片段。

string[] charset = new string[33] { "a", "b", "g", "d", "e", "v", "z", "T", "i", "k", "l", "m", "n", "o", "p", "J", "r", "s","t", "u", "f", "q", "R", "y", "S", "C", "c", "Z", "w", "W", "x", "j", "h" }; 
string unicodeString = "აბ, - გდ"; 
string latin_string = ""; 
byte[] unicodeBytes = Encoding.Unicode.GetBytes(unicodeString); 
for (int p = 0; p < unicodeBytes.Length/2; p++) 
{ 
if (unicodeBytes[p * 2] > 207 && unicodeBytes[p * 2] < 241) 
latin_string += charset[unicodeBytes[p * 2] - 208]; 
else 
latin_string += Convert.ToChar(unicodeBytes[p * 2]).ToString(); 
} 

说明只将必要的部分:

Encoding.Unicode.GetBytes(unicodeString);返回的字节数组,该数组的长度是2 * unicodeString.Length。这样来自unicodestring的每个字母都有一对字节。 为更好的解释继承人图像附加enter image description here

unicodeBytes偶数索引有值表示您要解码的字母。格鲁吉亚字母的第一个字母是208开始,结尾是240(总计33)。所以如果unicodeBytes的值在[208; 240]的范围内,我不得不使用charset字符串数组来获得拉丁等价物,否则unicodeBytes值只是char代码。

我不知道是否有一个库,但这种方法会给你基本的想法如何编写自己的转换器。

相关问题