如何检索包含印地语文本的字符串中字符的unicode十进制表示形式



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

当您编写像string abc= "मेरा";这样的代码时,您已经将其作为Unicode(特别是UTF-16),因此您不必转换任何内容。如果你想访问单数字符,你可以使用普通索引:例如abc[1] (DEVANAGARI元音符号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位)码位,因此这将为您提供它们。(也许有一个更直接的解决方案,但我还没有找到一个)

由于。net字符是一个 Unicode字符(至少对于BMP代码点而言),您可以简单地枚举字符串中的所有字符:

var abc = "मेरा";
foreach (var c in abc)
{
    Console.WriteLine((int)c);
}

导致

2350
2375
2352
2366

use

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

返回unicode值

如果您正在尝试将文件从遗留编码转换为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());
    }

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

你可以在Unicode联盟的网站上找到这个图表。

请注意,Unicode代码点传统上是十六进制的。因此,代码点将被写成U+092E,而不是十进制数2350,并且它在代码图上显示为092E。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新