将十六进制unicode字符转换为其可视化表示形式

时间:2011-07-03 17:14:02

标签: c# unicode char hex

我正在尝试制作一个C#程序,将unicode字符从其十六进制格式转换为单个字符,我遇到了问题。这是我的代码:

这有效:

char e = Convert.ToChar("\u0066"); 

然而,这不起作用:

Console.WriteLine("enter unicode format character (for example \\u0066)");
string s = Console.ReadLine();
Console.WriteLine("you entered (for example f)");
char c = Convert.ToChar(s); 

因为(Convert.ToChar("\\u0066"))给出错误:

  

字符串必须正好一个字符

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:6)

int.Parse不喜欢“\ u”前缀,但如果你先验证确保它在那里,你可以使用

char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber);

这将从输入字符串中删除前两个字符并解析剩余的文本。

为了确保序列是有效序列,请尝试:

Regex reg = new Regex(@"^\\u([0-9A-Fa-f]{4})$");
if( reg.IsMatch(s) )
{
  char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber);
}
else
{
  // Error
}

答案 1 :(得分:-1)

Convert.ToChar("\u0066");

这是运行时的单字符字符串,因为编译器处理了反斜杠序列。

其余代码处理六个字符串{ '\\', 'u', '0', '0', '6', '6' }Convert.ToChar无法处理。

尝试char.Parse(或可能Int16.Parse(s, NumberStyles.AllowHexSpecifier),然后转换为char)。