HTML hex用于修饰字符

时间:2015-04-29 13:38:51

标签: c# html hex

我正在下载带有波兰字符的HTML文件,并通过以下方式将其解析为字符串:

public static string HexToString(string hex)
{
    var sb = new StringBuilder();
    for (int i = 0; i < hex.Length; i += 2)
    {
        string hexdec = hex.Substring(i, 2);
        int number = int.Parse(hexdec, NumberStyles.HexNumber);
        char charToAdd = (char)number;
        sb.Append(charToAdd);
    }
    return sb.ToString();
}

所以当我找到%21时我发送21到HexToString()并且作为回报有!,这没关系,但是char表示为%C4%85(Ä)并且我想得到±炭

2 个答案:

答案 0 :(得分:2)

这里的问题是你将十六进制代码视为UTF16(这是char的原生格式),但它们实际上是UTF8。

使用UTF8编码很容易解决。

首先,让我们编写一个方便的StringToByteArray()方法:

public static byte[] StringToByteArray(string hex)
{
    return Enumerable.Range(0, hex.Length)
        .Where(x => x%2 == 0)
        .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
        .ToArray();
}

现在您可以将十六进制字符串转换为如下文本:

string hexStr = "C485"; // Or whatever your input hex string is.

var bytes = StringToByteArray(hexStr);
string text = Encoding.UTF8.GetString(bytes);

// ...use text

答案 1 :(得分:1)

马修是对的,但你也可以使用它:

echo "<td align='center' style='vertical-align:middle;'> Bust: ".$_POST["bust"]."<br> Waist: ".$_POST["waist"]."<br> </td>";