C# 在C中使用Unicode值#

C# 在C中使用Unicode值#,c#,unicode,unicode-escapes,C#,Unicode,Unicode Escapes,在我的应用程序中使用Unicode时,我遇到了这种奇怪的情况。我有一个随机单码列表,然后随机分配给一个对象 var icons = new List<string> { "\uf022", "\uf039", "\uf02b", "\uf1b2", "\uf07b" }; var icons=新列表{“\uf022”、“\uf039”、“\uf02b”、“\uf1b2”、“\uf07b”}; 调试对象时,object.Icon属性显示“,这是unicode的正确值。当我在XAML

在我的应用程序中使用Unicode时,我遇到了这种奇怪的情况。我有一个随机单码列表,然后随机分配给一个对象

var icons = new List<string> { "\uf022", "\uf039", "\uf02b", "\uf1b2", "\uf07b" };
var icons=新列表{“\uf022”、“\uf039”、“\uf02b”、“\uf1b2”、“\uf07b”};
调试对象时,
object.Icon
属性显示
,这是unicode的正确值。当我在XAML页面上显示unicodes时,会显示正确的图标

因此,当我开始工作时,我想将unicode值移动到数据库中,而不是使其随机。但现在,当我调试对象时,
object.Icon
属性显示“
\\unicdevalue”
即“\uf022”

在XAML页面上显示此值时,它将显示为文本值\uf022,而不是图标


图标列表中的字符串与数据库中的字符串值有什么区别?

数据库中的unicode序列有反斜杠转义,因此
“\\uf042”
实际上总共是6个字符:反斜杠,“u”、“f”、“0”、“4”和“2”

然而,就C#而言,代码中的unicode序列实际上只是一个字符,它们是unicode代码点的文本


若要将数据库中的值更改为单个unicode代码点,请尝试该方法。

您需要调试将这些值放入数据库并检索它们的代码,因为这是出错的地方。仅仅观察最终结果只会告诉你有问题,而不是它是什么。尽管数据库中的值与随机图标列表中的值完全相同。这段代码是关于检索的。然后你把它缩小到检索东西的代码,我想说。需要明确的是:由单个字符
U+F022
组成的字符串与字符串
\uf022
不同。您的数据库也可以(可能)存储,但请确保您不会被无法准确显示内容的工具弄糊涂。例如,如果使用SQL Server,请使用
DATALENGTH
获取以字节为单位的字符串大小,并使用
CONVERT(VARBINARY(MAX),[column])
等工具查看代码点中的实际内容。(还要注意,
U+F022
是一个未分配的专用字符,可以显示为任何形式。)我已经更改了将unicode保存到数据库中的代码,改为保存十进制值。然后我可以使用Char.ConvertFromUtf32转换为图标。