.net 如何在C#中使用32位Unicode字符?

mgdq6dx1  于 2023-03-04  发布在  .NET
关注(0)|答案(3)|浏览(229)

也许我不需要32位字符串,但我需要表示32位字符
http://www.fileformat.info/info/unicode/char/1f4a9/index.htm现在我抓取了symbola字体,当我粘贴它(在url或任何文本区域)时可以看到字符,所以我知道我有它的字体支持。
但是如何在我的C#/.NET应用程序中支持它呢?

  • 编辑-我会添加一些东西。当我在我的.NET winform应用程序中粘贴所说的字符时,我没有正确地看到字符。当粘贴到firefox中时,我确实正确地看到了字符。我如何在我的winform应用程序中正确地看到字符?
sf6xfgos

sf6xfgos1#

我不太明白你的问题:

  • NET中的String是UTF-16编码的,对此您无能为力。如果您想获得UTF-32版本的字符串,则必须使用UTF32Encoding类将其转换为字节数组。
  • 因此.NET中的Char字符是16位长,对此您也无能为力。UTF-32编码的字符只能由字节数组(具有4项)表示。您可以使用UTF32Encoding类来实现此目的。
  • 每一个UTF-32字符都有一个等价的UTF-16表示,反之亦然,所以在这个上下文中,我们只能谈论字符,以及它们不同的表示(编码),UTF-16是.NET平台上选择的表示。
yh2wf1be

yh2wf1be2#

你没有说“支持”到底是什么意思。但是你不需要做任何特殊的事情来处理不适合一个16位char的字符,除非你做字符串操作。它们只会被表示为代理对,但是如果你把string作为一个整体来对待,你不需要知道这些。
一个例外是一些字符串操作方法不能正常工作,例如"\U0001F4A9".Substring(1)将返回代理项对的后半部分,这不是一个有效的字符串。

toe95027

toe950273#

如果问题是,
我如何将“一堆便便”表情符号U+1F 4A 9放入一个C#字符串常量中,因为它需要32位才能在UTF-16代码页中表示?
那么答案就是:

"\U0001F4A9"

在Visual Studio的C#交互式窗口中,将显示以下输出:

请注意大写\U转义码的使用。它必须后跟正好八个十六进制数字,这与\u不同,\u必须后跟正好四个十六进制数字。请参见C#语言参考中的Unicode字符转义序列。
还要注意,"\U0001F4A9".Length的计算结果为2,因为Length总是返回字符串中16位字符的数目,而不是字符串中Unicode字符的数目。
当字符串被打印出来时,只要编码转换过程正确执行,就应该只看到一个字符。
请注意,U+1F4A9是OP问题中链接的示例表情符号。

相关问题