Unicode字符串到二进制字符串,二进制字符串到unicode c#

时间:2016-06-20 11:29:22

标签: c# unicode encoding

我有一个unicode文本,其中包含一些unicode字符,“Hello,world!这个段落有一些unicode字符。”

我想将此段转换为二进制字符串,即使用数据类型字符串的二进制数字。转换后,我还想将该二进制字符串转换回unicode字符串。

2 个答案:

答案 0 :(得分:3)

如果您只是想找到一种方法来解码并将字符串编码为byte []而不是实际的二进制文件,那么我将使用System.Text

来自msdn的实际例子:

      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);

别忘了

using System;
using System.Text;

答案 1 :(得分:1)

由于Unicode字符集有多种编码,您必须选择:UTF-8,UTF-16,UTF-32等。假设您选择了UTF-8。你必须双向使用相同的编码。

转换为二进制字符串:

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.

又回来了:

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())
相关问题