我正在下载带有波兰字符的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(Ä)并且我想得到±炭
答案 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>";