【问题标题】:Using Unicode Values in C#在 C# 中使用 Unicode 值
【发布时间】:2018-06-14 10:30:54
【问题描述】:

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

var icons = new List<string> { "\uf022", "\uf039", "\uf02b", "\uf1b2", "\uf07b" };

当我调试对象时,Object.Icon 属性显示".",这是 unicode 的正确值。当我在 XAML 页面上显示 unicode 时,会显示正确的图标。

所以当我开始工作时,我想将 unicode 值移动到数据库中,而不是让它随机化。但是现在当我调试对象时,Object.Icon 属性显示“\\unicodevalue" 即“\uf022”。

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

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

【问题讨论】:

  • 您需要调试将这些值放入数据库并检索它们的代码,因为这就是问题所在。仅观察最终结果只会告诉您存在问题,而不是问题所在。
  • 数据库中的值与随机图标列表中的值完全相同。此代码正在检索中。
  • 那么您已经将范围缩小到检索事物的代码,我会说。需要明确的是:由单个字符U+F022 组成的字符串与字符串\uf022 不是同一个字符串。您的数据库可以(可能)存储任何一种,但请确保您不会被无法准确显示内容的工具所迷惑。例如,如果使用 SQL Server,则使用 DATALENGTH 来获取以字节为单位的字符串大小,并使用 CONVERT(VARBINARY(MAX), [column]) 之类的东西来查看代码点中的实际内容。 (另请注意,U+F022 是未分配的私人使用字符,可以显示为任何字符。)

标签: c# unicode unicode-escapes


【解决方案1】:

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

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

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

【讨论】:

  • 我更改了将 unicode 保存到数据库中的代码,改为保存十进制值。然后我可以使用 Char.ConvertFromUtf32 转换为图标。
猜你喜欢
  • 2016-01-04
  • 2023-03-29
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多