2012-07-28 48 views
17

Tôi có String ký tự sau đây.Ký tự Unicode chuỗi

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

Khi tôi in các chuỗi trên, tôi nhận được:

\u0625\u0647\u062 

Làm thế nào tôi có thể nhận được các ký tự Unicode in thực sự thay vì đại diện uXXXX \ này?


Tôi đã tìm thấy câu trả lời:

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

Tôi tìm thấy câu hỏi hơi mơ hồ, bạn có kiểm soát chuỗi đó không? Nếu vậy, chỉ cần loại bỏ một trong các dấu gạch chéo ngược, tức là. "\ u1234 \ u5678". Nếu không, bạn nên xem xét sử dụng regex với một phương thức gọi lại để phân tích số, chuyển đổi nó thành một char, và sau đó trả về char đó dưới dạng chuỗi – Onkelborg

+0

Ý của bạn là gì bởi "bạn không thể kiểm soát chuỗi"? Kịch bản của bạn là gì? –

+1

Ok Tôi đã tìm thấy câu trả lời: System.Text.RegularExpressions.Regex.Unescape() –

Trả lời

1

Hãy thử 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

Nếu bạn thực sự không kiểm soát chuỗi, sau đó bạn cần phải thay thế những trình tự thoát với họ giá trị:

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

và hy vọng rằng bạn không có \\ thoát trong đó.

+1

Câu trả lời chính xác hoạt động là System.Text.RegularExpressions.Regex.Unescape() –

+0

Điều đó làm được nhiều hơn là thay thế các lối thoát Unicode ... – Joey

+1

Tôi tin rằng MatchEvaluator phải là: 'm => ((char) Chuyển đổi .ToInt32 (m.Groups [1] .Value, 16)) .ToString() '. – Otiel

Các vấn đề liên quan