2011-05-05 26 views

回答

2

當你編寫像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的編碼。對於Basic Multilingual Plane中的字符,這與其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位)編碼點進行編碼,因此會給你它們。 (也許有一個更直接的解決方案,但我還沒有找到一個。)

+0

這就是我一直在尋找的東西。請告訴我如何使用abc.Select(c =>(int)c) 來獲取變量中的4個值。 – Deepak 2011-05-05 20:30:16

+0

@Deepak,你是什麼意思?這個結果是與這4個值相關的序列。如果你想把它們放在一個變量中,只要執行'var chars = abc.Select(c =>(int)c);'就像使用其他代碼一樣。 – svick 2011-05-05 20:34:24

+0

然後你可以使用'foreach'和'Console.WriteLine()'把它們寫出來給控制檯。 – svick 2011-05-05 20:35:16

1

使用

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

,將返回你的Unicode值。

+0

謝謝,但你可以給我完整的代碼,以便我可以將它存儲在一個十六進制編號。 – Deepak 2011-05-05 19:40:41

+2

你錯了。這不會返回「Unicode值」,我認爲你的意思是Unicode代碼點。這將返回它們表示UTF-8中給定字符串的字節。 – svick 2011-05-05 19:41:27

+0

請任何人都可以幫我取得unicode的值,因爲這個值是十進制的2350。 – Deepak 2011-05-05 19:47:14

1

如果您正試圖將文件從一個傳統的編碼轉換成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 Consortium網站here圖表。

請注意,Unicode代碼點傳統上以十六進制編寫。因此,而不是十進制數字2350,代碼點將被寫爲U + 092E,並在代碼圖上顯示爲092E。

3

由於a。淨焦炭是一個 Unicode字符(至少爲BMP代碼點),你可以簡單地列舉所有字符串中的字符:導致

2350 
2375 
2352 
2366 
+0

謝謝你,它爲我工作。 – Deepak 2011-05-05 20:46:26

1

var abc = "मेरा"; 

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

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

此字符串包含BMP中的四個代碼點,UTF-16中的代碼點由8個字節表示。您可以通過指數與s[i]訪問它們,用foreach環路等

如果你想底層8個字節你可以訪問他們像這樣:

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

該字符串包含4個代碼點,它表示爲4個char或8個字節。你的代碼(固定時)返回一個8字節的數組。 – svick 2011-05-05 20:10:36

+0

@svick我只能看到2個代碼點。你能解釋4從哪裏來? – 2011-05-05 20:11:34

+0

@svick看來我的印地文不是很好!我糾正了我的答案。 – 2011-05-05 20:18:22

相關問題