c# - UTF8⇔二进制,十六进制和64进制转换器
本文关键字:转换器 十六进制 UTF8 二进制 | 更新日期: 2023-09-27 18:12:25
这个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;
}
您可以使用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));
我使用这个函数并为我工作。我的解决方案:
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;
}