我正在尝试制作一个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"))
给出错误:
字符串必须正好一个字符
任何人都知道如何做到这一点?
答案 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
)。