【问题标题】:How to convert unicode encoded data into Devanagri(Hindi) text如何将 unicode 编码数据转换为梵文(印地语)文本
【发布时间】:2011-10-05 03:20:05
【问题描述】:

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

【问题讨论】:

  • 只是为您的“是 unicode”添加注释,您会看到由两个字节表示的 unicode 代码点。 IE。您的字符是 091A 0947 0924 0020 0924 0924。您可以在 unicode.org/charts/PDF/U0900.pdf 看到相应的 Devangari 代码页。

标签: c# unicode utf-8 hindi


【解决方案1】:

感谢您的回复,他们帮助我找到了确切的解决方案 - http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/12a3558d-fe48-44fd-840e-03facfd9c944

【讨论】:

    【解决方案2】:

    这里是我用来将Georgian unicode 转换为其拉丁等效文本的代码 sn-p。

    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 的每个字母都有一对字节。 为了更好的解释,附上图片

    unicodeBytes 甚至索引都有代表您要解码的字母的值。格鲁吉亚字母的第一个字母从 208 开始,到 240 结束(总共 33 个)。因此,如果 unicodeBytes 值在 [208;240] 范围内,我必须使用 charset 字符串数组来获得拉丁等价物,否则 unicodeBytes 值只是字符代码。

    我不知道是否有它的库,但这种方法将让您基本了解如何编写自己的转换器。

    【讨论】:

      【解决方案3】:

      使用 System.Text.Encoding 类。它有方法 GetChars(byte[])。而且您可能需要合适的字体,因为一些印地语符号可以用多种方式书写。

      【讨论】:

        猜你喜欢
        • 2018-05-02
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        相关资源
        最近更新 更多