2011-05-05 11 views
1

私は、Visual Studio 2010をc#で使用して、テキストをユニコードに変換しています。私のように文字列abc = "मेरा"を持っています。 この文字列には4文字あります。私はすべての4つのユニコード文字が必要です。 私を助けてください。あなたのUnicode値を返しますヒンディー文字を含む文字列の文字のUnicode 10進表現を取得するにはどうすればよいですか?

+0

はhttp://unicodelookup.com/#मेराを参照してください。/1 –

答えて

2

string abc= "मेरा";のようなコードを書くと、すでにUnicode(特にUTF-16)として扱われているので、何も変換する必要はありません。単数の文字にアクセスしたい場合は、通常のインデックスを使用してそれを行うことができます。 abc[1](DEVANAGARI VOWEL SIGN E)である。

これらの文字の数値表現を見たい場合は、整数にキャストします。たとえば、あなたがこれらの数字の16進表現を表示したい場合は

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

+0

@Depepak、どういう意味ですか?その結果は、これらの4つの値を持つシーケンスです。それらを変数に入れるには、他のコードと同様に 'var chars = abc.Select(c =>(int)c);を実行してください。 – svick

+0

例えば 'foreach'と' Console.WriteLine() 'を使ってコンソールに書き出すことができます。 – svick

1

使用

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

+0

ありがとう、しかし、私は16進数でそれを格納することができますので、私にフルコードを与えることができます。 – Deepak

+2

あなたは間違っています。これは「Unicode値」を返しません。これは、Unicodeコードポイントを意味するものとみなします。 UTF-8で与えられた文字列を表すバイトを返します。 – svick

+0

誰かが私にunicodeの値を取得するのを助けてください。値は2350(10進数)です。 – Deepak

1

あなたはユニコードにレガシーエンコーディングからファイルを変換しようとしている場合:

は、所望の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コードポイントは伝統的には16進数で書かれています。したがって、10進数2350ではなく、コードポイントはU + 092Eと書かれ、コードチャートでは092Eと表示されます。

3

あなたは、文字列を持っている場合は

var abc = "मेरा"; 

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

2350 
2375 
2352 
2366 
+0

ありがとう、それは私のために働いた。 – Deepak

1

その結果:ネットCHAR は(少なくとも、BMPコードポイントのために)、あなたは、単に文字列内のすべての文字を列挙することができます Unicode文字ですs = मेराあなたはすでに答えがあります。

この文字列には、UTF-16で8バイトで表されるBMPの4つのコードポイントが含まれています。あなたは基礎となる8つのバイトをしたい場合は、なるようにそれらにアクセスすることができ

など foreachループで、 s[i]でインデックスでそれらにアクセスすることができます

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

文字列には4つのコードポイントが含まれ、4つの 'char'sまたは8バイトとして表されます。あなたのコード(固定時)は8バイトの配列を返します。 – svick

+0

@svick私は2つのコードポイントしか見ることができません。 4がどこから来たのか説明できますか? –

+0

@svick私のヒンディーはあまり良くないようですね!私は私の答えを訂正しました。 –

関連する問題