C# - UTF8⇔二进制,十六进制和Base 64转换器

时间:2015-09-12 17:25:46

标签: javascript c# utf-8 hex converter

C#中这个JavaScript函数的等价物是什么? 这是我试图转换为C#的JavaScript语句:

utf82rstr = function (input) {
    var output = "", i = 0, c = c1 = c2 = 0;

    while (i < input.length) {
        c = input.charCodeAt(i);

        if (c < 128) {
            output += String.fromCharCode(c);
            i++;
        } else if ((c > 191) && (c < 224)) {
            c2 = input.charCodeAt(i + 1);
            output += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = input.charCodeAt(i + 1);
            c3 = input.charCodeAt(i + 2);
            output += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }

    return output;
}

2 个答案:

答案 0 :(得分:2)

您可以使用Char.ConvertFromUtf32()Char.Parse

//Both of rsult1 and result2 will be "A"
var result1 = Char.ConvertFromUtf32(int.Parse("0041", System.Globalization.NumberStyles.HexNumber));
var result2 = Char.Parse("\u0041").ToString();

以下是您提到的样本:

// returns س
var result = Char.ConvertFromUtf32(((216 & 31) << 6) | (179 & 63));

答案 1 :(得分:0)

我使用此功能并为我工作。我的解决方案:

&#13;
&#13;
static string utf82rstr(string input) {
  var output = "";
  int i = 0, c = 0, c2 = 0, c3 = 0;

  while (i < input.Length) {
    var tmp = input[i]; // /n == 10
    c = ((int) input[i]);


    if (c == 10) {
      output += "~";
      i++;
    } else if (c == 0) {
      output += "";
      i++;
    } else if (c < 128) {
      output += Char.ConvertFromUtf32(c);
      i++;
    } else if ((c > 191) && (c < 224)) {
      c2 = ((int) input[i + 1]);
      output += Char.ConvertFromUtf32(((c & 31) << 6) | (c2 & 63));
      i += 2;
    } else {
      try {
        c2 = (int) input[i + 1];
        c3 = (int) input[i + 2];
        output += Char.ConvertFromUtf32(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
        i += 3;
      } catch (Exception e) {
        output += "";
        i += 3;
      }
    }
  }
  return output;
}
&#13;
&#13;
&#13;