2011-07-03 6 views
8

유니 코드 문자를 16 진수 형식에서 단일 문자로 변환하는 C# 프로그램을 만들려고하는데 문제가 있습니다. 이 작품16 진수 유니 코드 문자를 시각적 표현으로 변환

: 이것은 내 코드입니다 그러나

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); 

이 입력 문자열에서 처음 두 문자를 제거합니다 및 사용할 수 있습니다 나머지 텍스트를 파싱합니다. 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'을 파싱 할 수 있으며 어느 쪽도 유효하지 않은 유니 코드 문자 상수입니다. –

+2

실제로 입력 값의 유효성을 검사해야합니다. –

+0

@ 스티브 : 예 !!!! 정말 고맙습니다!! 사실, 처음 2 문자는 나를 위해 충분할 것입니다. 왜냐하면 \ u로 시작하는 시퀀스가 ​​부적절한 시퀀스를 일찍 잡기 때문에 적절한 16 진수 시퀀스 여야하기 때문입니다. 당신은 내 날을 저장 :) – vldmrrdjcc

-1
Convert.ToChar("\u0066"); 

컴파일러가 백 슬래시 시퀀스를 처리했기 때문에 런타임시이 문자가 하나의 문자열입니다.

나머지 코드는 { '\\', 'u', '0', '0', '6', '6' } 인 6 개의 문자열을 처리합니다.이 중 Convert.ToChar은 처리 할 수 ​​없습니다.

char.Parse (또는 아마도 Int16.Parse(s, NumberStyles.AllowHexSpecifier))을 시도한 후 char으로 캐스트하십시오.

+0

과 Int16.Parse는 지원하지 않습니다

순서는 유효 하나입니다 있는지 확인하기 위해이 시도 유니 코드 지정자. –

+0

@Steve : 음, 정규 표현식 등을 사용하여 문자열에서 16 진수를 추출해야합니다. –

관련 문제