[英]How to retrieve the unicode decimal representation of the chars in a string containing hindi text?
我正在c#中使用Visual Studio 2010將文本轉換為unicode。 就像我有一個字符串abc =“मेरा”。 該字符串中有4個字符。 我需要所有四個unicode字符。 請幫我。
由於.Net char 是 Unicode字符(至少對於BMP代碼點而言),因此您可以簡單地枚舉字符串中的所有字符:
var abc = "मेरा";
foreach (var c in abc)
{
Console.WriteLine((int)c);
}
導致
2350
2375
2352
2366
當您編寫類似string abc= "मेरा";
的代碼時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位)代碼點進行編碼,因此可以為您提供這些信息。 (也許有一個更直接的解決方案,但我還沒有找到。)
采用
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());
}
如果要查找梵文字符到Unicode代碼點的映射:
請注意,Unicode代碼點傳統上以十六進制編寫。 因此,代碼點將代替十進制數字2350,而是寫為U + 092E,並且在代碼表上顯示為092E。
如果您有字符串s = मेरा
那么您已經有了答案。
該字符串在BMP中包含四個代碼點,在UTF-16中由8個字節表示。 您可以使用s[i]
進行索引,並使用foreach
循環等訪問它們。
如果需要底層的8個字節,則可以這樣訪問它們:
string str = @"मेरा";
byte[] arr = System.Text.UnicodeEncoding.GetBytes(str);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.