2011-07-03 13 views
8

Unicode文字を16進数形式から1文字に変換するC#プログラムを作成しようとしていますが、問題があります。この作品16進Unicode文字を視覚的表現に変換する

::これは私のコードであるしかし

char e = Convert.ToChar("\u0066"); 

を、これは動作しません:

String must be exactly one character long

誰もが持っている:

Console.WriteLine("enter unicode format character (for example \\u0066)"); 
string s = Console.ReadLine(); 
Console.WriteLine("you entered (for example f)"); 
char c = Convert.ToChar(s); 

(Convert.ToChar("\\u0066"))ので、エラーを与えますどのようにこれを行うアイデア?

答えて

6

int.Parseは「\ U」接頭辞が好きではありませんが、あなたはそれがあることを保証するために、まず検証した場合、あなたは

char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber); 

これは、入力文字列から最初の2つの文字を取り除き、使用することができます残りのテキストを解析します。 char.parseはまだ単一の文字のみを受け付けますので、どちらもそれらの作品の

Regex reg = new Regex(@"^\\u([0-9A-Fa-f]{4})$"); 
if(reg.IsMatch(s)) 
{ 
    char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber); 
} 
else 
{ 
    // Error 
} 
+2

これはあまりよくありません。 '\ u a'と' \ u1234567890'を解析することができますが、いずれも有効なUnicode文字定数ではありません。 –

+2

実際、入力値を最初に検証する必要があります。 –

+0

@Steve:はい!!!!どうもありがとうございます!!実際には、最初の2文字を検証するだけで十分です。なぜなら、\ uで始まるシーケンスが適切な16進シーケンスでなければならないからです。あなたは私の一日を保存:) – vldmrrdjcc

-1

コンパイラがバックスラッシュシーケンスを処理したため、これは実行時に1文字の文字列です。

残りのコードは{ '\\', 'u', '0', '0', '6', '6' }の6文字の文字列を処理していますが、Convert.ToCharでは処理できません。

お試しchar.Parse(またはおそらくInt16.Parse(s, NumberStyles.AllowHexSpecifier)、次にcharへのキャスト)を試してください。

+0

をしてInt16.Parseはサポートしていません:

シーケンスが有効なものであることを確実にするために、これを試してくださいユニコード指定子。 –

+0

@Steve:文字列から正規表現などを使って16進数を引き出す必要があります。 –

関連する問題