-->

如何检索含有印地文文本字符串中的字符的Unicode十进制表示?(How to retrieve t

2019-09-28 22:05发布

我使用Visual Studio 2010的C#转换文本统一码。 像我有一个字符串ABC =“मेरा”。 有这串4个字符。 我需要所有四个Unicode字符。 请帮我。

Answer 1:

当你写一个类似的代码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意味着它们的编码。 对于人物的基本多文种平面 ,这是一样的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位)代码点,这会给你他们。 (也许还有一个更简单的解决方案,但我还没有找到一个。)



Answer 2:

由于净字符 Unicode字符(至少为BMP代码点),你可以简单地列举字符串中的所有字符:

var abc = "मेरा";

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

导致

2350
2375
2352
2366


Answer 3:

采用

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

这将返回您的Unicode值。



Answer 4:

如果您正试图将文件从一个传统的编码转换为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协会的网站在这里 。

需要注意的是Unicode码点传统上被写在十六进制。 因此,而不是十进制数2350,代码点会被写为U + 092E,它表现为092E的代码图表上。



Answer 5:

如果你有串s = मेरा那么你已经有了答案。

此字符串包含在BMP四个码点,这在UTF-16是由8个字节表示。 您可以通过索引与访问这些s[i]foreach循环等。

如果你想底层8个字节你可以访问他们像这样:

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


文章来源: How to retrieve the unicode decimal representation of the chars in a string containing hindi text?