Convert.ToChar()上的C#奇怪反斜杠

时间:2012-11-19 07:21:37

标签: c# unicode

我正在尝试将xml字符实体转换为C#c​​har ...

string charString = "₁".Replace("&#", "\\").Replace(";", "");
char c = Convert.ToChar(charString);

我不知道为什么它在Convert.Char线上失败了。即使调试器将charString显示为"\\\\x2081",它实际上也是"\x2081",这是一个有效的Unicode字符。例外是太多字符。

2 个答案:

答案 0 :(得分:5)

ToChar(string)的文档非常易读:

  

将指定字符串的第一个字符转换为Unicode字符。

此外:

  

FormatException - value 的长度不是1.

它不会将角色的十六进制表示转换为所述角色。它将采用一个字符的字符串并将该字符返回给您。与执行s[0]相同。

你想要的是:

string hex = "₁".Replace("&#x", "").Replace(";", "");
char c = (char)Convert.ToInt32(hex, 16);

答案 1 :(得分:0)

带有值的

Convert.ToChar(value)是一个长度为1的字符串。charString的长度超过1 "\\x2081"。 似乎"₁"是Unicode十六进制字符代码(Unicode Hex Character Code ₁)。所以你必须这样做:

string charString = "₁".Replace("&#x", "").Replace(";", "");
char c = (char)Convert.ToInt32(charString , NumberStyles.HexNumber);

注意:它是SUBSCRIPT ONE的HTML实体(十六进制)(参见上面的链接^ _ ^)