2016-06-20 11 views
1

Ich habe einen Unicode-Text mit einigen Unicode-Zeichen sagen, "Hallo, Welt! Dieser Absatz hat einige Unicode-Zeichen."Unicode-String zu Binär-String und Binär-String zu Unicode C#

Ich möchte diesen Absatz in binäre Zeichenfolge, d. H. In Binärziffern mit Datentyp Zeichenfolge konvertieren. und nach dem Konvertieren möchte ich auch diese binäre Zeichenfolge zurück in Unicode-String konvertieren.

+0

Duplizieren von http://stackoverflow.com/questions/1615559/convert-a-unicode-string-

in einer binären Zeichenfolge konvertieren to-a-masked-ascii-string – buffjape

+0

@buffjape Das ist etwas anderes, es ist kein Duplikat dessen, was ich will. Was ich will, wird im folgenden Beispiel gezeigt: Eingabe: Hallo, dieser Text ist in Unicode. Ausgabe: 11000010111100101111 (Ziffern im String-Datentyp) Ausgabe2: Hallo, dieser Text ist in Unicode. Hoffe, das wird Ihnen mein Problem erklären. –

+0

Ist das Beispiel, dass Sie hier genau angeben? "Hi, dieser Text ist in Unicode." ist in keiner Weise gleichbedeutend mit einer möglichen Darstellung von "11000010111100101111" – pijemcolu

Antwort

1

vergessen Sie Da es mehrere Kodierungen für den Unicode-Zeichensatz sind, müssen Sie wählen: UTF-8, UTF-16, UTF-32, usw. Sagen Sie UTF-8 gerichtet. Sie müssen die gleiche Codierung in beide Richtungen verwenden.

String.Join(
    String.Empty, // running them all together makes it tricky. 
    Encoding.UTF8 
     .GetBytes("Hello, world! this paragraph has some unicode characters.") 
     .Select(byt => Convert.ToString(byt, 2).PadLeft(8, '0'))) // must ensure 8 digits. 

Und wieder zurück:

Encoding.UTF8.GetString(
    Regex.Split(
     "010010000110010101101100011011000110111100101100001000000111011101101111011100100110110001100100001000010010000001110100011010000110100101110011001000000111000001100001011100100110000101100111011100100110000101110000011010000010000001101000011000010111001100100000011100110110111101101101011001010010000001110101011011100110100101100011011011110110010001100101001000000110001101101000011000010111001001100001011000110111010001100101011100100111001100101110" 
     ,"(.{8})") // this is the consequence of running them all together. 
    .Where(binary => !String.IsNullOrEmpty(binary)) // keeps the matches; drops empty parts 
    .Select(binary => Convert.ToByte(binary, 2)) 
    .ToArray()) 
+0

Das ist was man wollte. Danke ... –

3

Wenn Sie suchen einfach nach einer Möglichkeit, einen String in byte [] und nicht den tatsächlichen binären dann würde ich System.Text

Das tatsächliche Beispiel von Msdn verwenden zu dekodieren und zu kodieren:

 string unicodeString = "This string contains the unicode character Pi (\u03a0)"; 

    // Create two different encodings. 
    Encoding ascii = Encoding.ASCII; 
    Encoding unicode = Encoding.Unicode; 

    // Convert the string into a byte array. 
    byte[] unicodeBytes = unicode.GetBytes(unicodeString); 

    // Perform the conversion from one encoding to the other. 
    byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes); 

    // Convert the new byte[] into a char[] and then into a string. 
    char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)]; 
    ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0); 
    string asciiString = new string(asciiChars); 

    // Display the strings created before and after the conversion. 
    Console.WriteLine("Original string: {0}", unicodeString); 
    Console.WriteLine("Ascii converted string: {0}", asciiString); 

nicht

using System; 
using System.Text;