如何在包含hindi文本的字符串中检索字符的unicode十进制表示?

时间:2011-05-05 19:30:47

标签: c# .net unicode ascii hindi

我在c#中使用visual studio 2010将文本转换为unicodes。就像我有一个字符串abc =“मेरा”。 这个字符串中有4个字符。我需要所有四个unicode字符。 请帮帮我。

5 个答案:

答案 0 :(得分:3)

由于.Net char Unicode字符(至少对于BMP代码点),您可以简单地枚举字符串中的所有字符:

var abc = "मेरा";

foreach (var c in abc)
{
    Console.WriteLine((int)c);
}

导致

2350
2375
2352
2366

答案 1 :(得分:2)

当你编写像string abc= "मेरा";这样的代码时,你已经将它作为Unicode(特别是UTF-16),所以你不必转换任何东西。如果要访问单数字符,可以使用普通索引来执行此操作:例如abc[1](DEVANAGARI VOWEL SIGN E)。

如果要查看这些字符的数字表示,只需将它们转换为整数即可。例如

abc.Select(c => (int)c)

给出数字序列2350,2375,2352,2366。如果要查看这些数字的十六进制表示,请使用ToString()

abc.Select(c => ((int)c).ToString("x4"))

返回字符串序列“092e”,“0947”,“0930”,“093e”。

请注意,当我说数字表示时,我实际上是指使用UTF-16进行编码。对于Basic Multilingual Plane中的字符,这与其Unicode代码点相同。绝大多数使用过的角色都在BMP中,包括这里展示的4个印地语角色。

如果您也想处理其他平面中的字符,可以使用如下代码。

byte[] bytes = Encoding.UTF32.GetBytes(abc);

int codePointCount = bytes.Length / 4;

int[] codePoints = new int[codePointCount];

for (int i = 0; i < codePointCount; i++)
    codePoints[i] = BitConverter.ToInt32(bytes, i * 4);

由于UTF-32直接对所有(21位)代码点进行编码,因此可以为您提供。 (也许有一个更简单的解决方案,但我还没找到。)

答案 2 :(得分:1)

使用

System.Text.Encoding.UTF8.GetBytes(abc)

将返回您的unicode值。

答案 3 :(得分:1)

如果您尝试将文件从旧版编码转换为Unicode:

读取文件,提供源文件的正确编码,然后使用所需的Unicode编码方案编写文件。

    using (StreamReader reader = new StreamReader(@"C:\MyFile.txt", Encoding.GetEncoding("ISCII")))
    using (StreamWriter writer = new StreamWriter(@"C:\MyConvertedFile.txt", false, Encoding.UTF8))
    {
        writer.Write(reader.ReadToEnd());
    }

如果您正在寻找梵文字符到Unicode代码点的映射:

您可以在Unicode Consortium网站here找到该图表。

请注意,Unicode代码点传统上以十六进制形式编写。因此,代码点不是十进制数2350,而是写为U + 092E,在代码表上显示为092E。

答案 4 :(得分:1)

如果您有字符串s = मेरा,那么您已经有了答案。

此字符串在BMP中包含四个代码点,UTF-16中的代码点由8个字节表示。您可以使用s[i]索引访问它们,并使用foreach循环等。

如果你想要底层的8个字节,你可以这样访问它们:

string str = @"मेरा";
byte[] arr = System.Text.UnicodeEncoding.GetBytes(str);