2013-06-23 1 views
4

에 문자열에서 유니 코드 문자를 교체? 그 예 문자열 결과가 있어야한다 : 어떤 빠른 교체 방법은내가 예를 들어 문자열이 C#을

str = "\u0104\u0106\u0179 \u2013 \u0107wr\u0105" 

있습니까? 사용하고 싶지 않습니다. 각 문자를 바꾸십시오 ...

+0

..의 – Sayse

+0

중복 가능성 http://stackoverflow.com/ (문자열 [유니 코드 문자열 변환은 ASCII 문자열을 탈출하는] 않는 대체 : 여기

변환을 수행하기 위해 이들 빌딩 블록을 사용하는 함수의 질문/1615559/convert-unicode-strings-to-escaped-ascii-string) –

+0

고마워, 방금 발견 했어. 문제 해결됨. @ 사용하지 않으려는 것. 수백 번 바꾸어 라. – Yozer

답변

4

실제로는 char.ConvertToUtf32을 호출하는 유니 코드 코드 포인트로 작업해야하기 때문에 이런 JSON 문자열로 변환하는 것이 더 복잡합니다. 그렇게하기 위해서 당신은 어쨌든 서로 게이트 쌍을 다루어야합니다; System.Globalization.StringInfo이 도움이 될 수 있습니다.

string str = "ĄĆŹ - ćwrą"; 

public string ToJsonString(string s) 
{ 
    var enumerator = StringInfo.GetTextElementEnumerator(s); 
    var sb = new StringBuilder(); 

    while (enumerator.MoveNext()) 
    { 
     var unicodeChar = enumerator.GetTextElement(); 
     var codePoint = char.ConvertToUtf32(unicodeChar, 0); 
     if (codePoint < 0x80) { 
      sb.Append(unicodeChar); 
     } 
     else if (codePoint < 0xffff) { 
      sb.Append("\\u").Append(codePoint.ToString("x4")); 
     } 
     else { 
      sb.Append("\\u").Append((codePoint & 0xffff).ToString("x4")); 
      sb.Append("\\u").Append(((codePoint >> 16) & 0xffff).ToString("x4")); 
     } 
    } 

    return sb.ToString(); 
}