簡體   English   中英

如何檢索包含印地文文本的字符串中char的unicode十進制表示形式?

[英]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協會的網站在這里

請注意,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM