如何将Unicode编码转换为字符

3

我是用以下方法获取HTML内容:

using (var wb = new WebClient())
{
    data = soeArray;
    var response = wb.UploadValues(url, "POST", data);
    string result = System.Text.Encoding.UTF8.GetString(response);
}

但是响应中存在像ś这样的Unicode编码。是否有任何方法可以将其更改为相应的字符?

2个回答

6

1
这并不像你想象的那么简单。你收到的代码是十进制的Unicode码点。对于这些码点,你只需将它们转换为十六进制,并在前面加上\u字符即可。
int decCode = int.Parse(rawCode.Substring(2));
string hexCode = decCode.ToString("X");
char c = Char.Parse("\u" + hexCode);

很简单吧?错了。如果在HTML中的Unicode字符前面加上&#xCODE(例如&#x2014代表\u2014),它们也可以表示为十六进制代码。

很容易,我们只需添加逻辑,如果代码前面有一个“x”,则将其解析为十六进制,对吧?

rawCode = rawCode.Substring(2);
if (rawCode[0] == 'x') {
    hexCode = int.Parse(rawCode.Substring(1));
} else {
    int decCode = int.Parse(rawCode);
    hexCode = decCode.ToString("X");
}
char c = Char.Parse("\u" + hexCode);

似乎很简单?不是这样的。HTML Unicode 也可以用字符的 "EntityName" 来表示。(例如:"或©)。

你不想碰这段代码。

交给 HTML 解码器,你只需要做这样的事情。

string s =  System.Net.WebUtility.HtmlDecode("©"); // returns ©

嘿,即使我将Unicode代码放在代码标签中,它们实际上也会在我的帖子中呈现出来。 - Windwaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接