【问题标题】:How do i use 32 bit unicode characters in C#?如何在 C# 中使用 32 位 unicode 字符?
【发布时间】:2011-10-11 16:45:33
【问题描述】:

也许我不需要 32 位字符串,但我需要表示 32 位字符

http://www.fileformat.info/info/unicode/char/1f4a9/index.htm 现在我抓住了符号字体,当我粘贴它时可以看到字符(在 url 或任何文本区域中),所以我知道我有它的字体支持。

但是我如何在我的 C#/.NET 应用程序中支持它?

-edit- 我会添加一些东西。当我将上述字符粘贴到我的 .NET winform 应用程序中时,我没有正确看到该字符。将其粘贴到 Firefox 中时,我确实正确地看到了它。如何在我的 winform 应用程序中正确查看字符?

【问题讨论】:

  • 8 bit = 4 byte 应该为假,即使在 PHP 中也是如此。
  • 关于“我看不到正确的字符”:您的应用程序使用什么字体?那个字体有你要粘贴的字符吗?
  • @svick:我使用的是 winform,一个文本框,我将字体设置为 symbola。我没有正确看到角色
  • 这对我来说似乎很好用。 “我看不清角色”到底是什么意思?你看到了什么
  • @svick:我看到一个字符,里面有 2 个盒子,里面有 ?每个。这是使用 windows7 .NET 3.5 并使用多行文本框和字体设置为 symbola 再次使用 .NET 4 进行测试

标签: c# .net unicode utf-32


【解决方案1】:

我不确定我是否理解您的问题:

  • .NET 中的Strings 是 UTF-16 编码的,对此您无能为力。如果要获取 UTF-32 版本的字符串,则必须使用 UTF32Encoding 类将其转换为字节数组。
  • 因此,.NET 中的Characters 长度为 16 位,对此您也无能为力。一个 UTF-32 编码的字符只能用一个字节数组(有 4 项)来表示。为此,您可以使用 UTF32Encoding 类。
  • 每个 UTF-32 字符都有一个等效的 UTF-16 表示,反之亦然。因此,在这种情况下,我们只能谈论字符及其不同的表示(编码),UTF-16 是 .NET 平台上的首选表示。

【讨论】:

    【解决方案2】:

    你没有说“支持”到底是什么意思。但是你不需要做任何特别的事情来处理不适合一个 16 位 char 的字符,除非你进行字符串操作。它们将仅表示为代理对,但如果您将 string 视为一个整体,则不需要知道这一点。

    一个例外是某些字符串操作方法无法正常工作。例如"\U0001F4A9".Substring(1) 将返回代理对的后半部分,它不是有效的字符串。

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多