【问题标题】:C# - UTF8 ⇔ Binary, Hex, and Base 64 ConverterC# - UTF8 ⇔ 二进制、十六进制和 Base 64 转换器
【发布时间】:2015-12-09 02:08:40
【问题描述】:

这个 JavaScript 函数在 C# 中的等价物是什么?
这是我试图转换为 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;
}

【问题讨论】:

    标签: javascript c# utf-8 hex converter


    【解决方案1】:

    您可以使用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));
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • @RezaAghaei 谢谢,但我编辑了我的问题。所以,你的回答是不够的。
      猜你喜欢
      • 2017-02-05
      • 2011-02-19
      • 2020-06-27
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多