2011-12-19 11 views
8

Mam ciąg znaków Unicode z pliku tekstowego takiego, że. Chcę wyświetlić prawdziwą postać.Jak odblokować ciąg znaków Unicode w języku C#

Na przykład:

\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b 

Kiedy odczytać ten ciąg z pliku tekstowego za pomocą StreamReader.ReadToLine(), to uciec \ do '\\' takich jak "\\u8ba1", co nie jest potrzebne.

Wyświetli ciąg znaków Unicode taki sam jak z tekstu. Chcę, żeby wyświetlał prawdziwą postać.

  1. Jak zmienić "\\u8ba1" na "\u8ba1" w ciągu wynikowym.
  2. Czy powinienem użyć innego Czytnika do odczytania ciągu?
+0

możliwy duplikat [Dlaczego podczas odczytu z dokumentu XML otrzymam \ r \ r \ n \ n etc etc?] (Http://stackoverflow.com/questions/5980968/why-when-i-read- from-an-xml-document-do-i-get-rrnn-etc-etc) – dtb

+0

Można zapewnić kodowanie w konstruktorze StreamReader – Anand

+0

możliwy duplikat [Jak konwertować sekwencje specjalne Unicode na znaki Unicode w ciągach .NET] (http://stackoverflow.com/questions/183907/how-do-convert-unicode-escape-sequences-to-unicode-characters-in-a-net-string) – dtb

Odpowiedz

14

Jeśli masz ciąg jak

var input1 = "\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b"; 

// input1 == "计算机•网络•技术类" 

nie trzeba o przywróceniu znaczenia czegokolwiek. To tylko literał łańcuchowy, który zawiera sekwencje specjalne, a nie sam łańcuch.


Jeśli masz ciąg jak

var input2 = @"\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b"; 

można przywróceniu znaczenia go za pomocą następującego wyrażenia regularnego:

var result = Regex.Replace(
    input2, 
    @"\\[Uu]([0-9A-Fa-f]{4})", 
    m => char.ToString(
     (char)ushort.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier))); 

// result == "计算机•网络•技术类" 
+1

można również użyć statycznego 'Regex.Unescape'. – Oded

+2

Nie, Regex.Unescape jest przeznaczony tylko dla postaci Regex – marsze

+0

Naprawdę dziękuję. zrobiłeś mój dzień –

0

To pytanie wyszedł w pierwszym wyniku podczas googlowania, ale myślałem, powinien być prostszy sposób ... właśnie to wykorzystałem:

using System.Web; 

//... 

string x = HttpUtility.UrlDecode("Ingl\u00e9s"); 
Console.Write(x); // Inglés 
Powiązane problemy