我在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);