2012-07-28 5 views
17

다음 String 문자가 있습니다. 나는 위의 순서를 인쇄 할 때유니 코드 문자 문자열

string s = "\\u0625\\u0647\\u0644"; 

, 내가 얻을 :

\u0625\u0647\u062 

이 어떻게 실제 인쇄 가능한 유니 코드 문자 대신이 \의 Uxxxx에 표현받을 수 있나요?

s = System.Text.RegularExpressions.Regex.Unescape(s); 
+3

: 당신은 모든 것을 여기에서 찾을 수 있습니까? 그렇다면 백 슬래시 중 하나를 제거하십시오. "\ u1234 \ u5678". 그렇지 않다면, 콜백 메서드를 사용하여 regex를 사용하여 숫자를 파싱하고이를 char로 변환 한 다음 그 char을 문자열로 반환하는 것을 고려해야합니다. – Onkelborg

+0

"문자열을 제어 할 수 없다"는 것은 무엇을 의미합니까? 너의 시나리오는 뭐니? –

+1

Ok 답변을 찾았습니다 : System.Text.RegularExpressions.Regex.Unescape() –

답변

1

시도 Regex :


나는 대답 발견했다 당신이 정말로 문자열을 제어하지 않는 경우

String inputString = "\\u0625\\u0647\\u0644"; 

var stringBuilder = new StringBuilder(); 
foreach (Match match in Regex.Matches(inputString, @"\u([\dA-Fa-f]{4})")) 
{ 
    stringBuilder.AppendFormat(@"{0}", 
           (Char)Convert.ToInt32(match.Groups[1].Value)); 
} 

var result = stringBuilder.ToString(); 
3

, 그럼 당신이 그 이스케이프 시퀀스를 교체 할 필요가 자신의 값 :

Regex.Replace(s, @"\u([0-9A-Fa-f]{4})", m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); 

그리고 거기에 \\ 도망 치지 않기를 바랍니다.

+1

작동하는 정답은 System.Text.RegularExpressions.Regex.Unescape() –

+0

그 유니 코드 이스케이프를 대체하는 것 이상의 의미가 있습니다 ... – Joey

+1

MatchEvaluator는 다음과 같아야합니다 :'m => ((char) Convert .ToInt32 (m.Groups [1] .Value, 16)) .ToString()'. – Otiel

-2

나는 String.Normalize의 사용을 제안합니다. 내가 조금 막연한 질문, 당신이 그 문자열을 제어하는 ​​찾을

http://msdn.microsoft.com/it-it/library/8eaxk1x2.aspx

+1

'Normalize'는 유니 코드 정규화를 수행합니다. 이것은 완전히 별개의 개념입니다. – Joey