也许我不需要32位字符串,但我需要表示32位字符
http://www.fileformat.info/info/unicode/char/1f4a9/index.htm现在我抓取了symbola字体,当我粘贴它(在url或任何文本区域)时可以看到字符,所以我知道我有它的字体支持。
但是如何在我的C#/.NET应用程序中支持它呢?
- 编辑-我会添加一些东西。当我在我的.NET winform应用程序中粘贴所说的字符时,我没有正确地看到字符。当粘贴到firefox中时,我确实正确地看到了字符。我如何在我的winform应用程序中正确地看到字符?
3条答案
按热度按时间sf6xfgos1#
我不太明白你的问题:
String
是UTF-16编码的,对此您无能为力。如果您想获得UTF-32版本的字符串,则必须使用UTF32Encoding类将其转换为字节数组。Char
字符是16位长,对此您也无能为力。UTF-32编码的字符只能由字节数组(具有4项)表示。您可以使用UTF32Encoding类来实现此目的。yh2wf1be2#
你没有说“支持”到底是什么意思。但是你不需要做任何特殊的事情来处理不适合一个16位
char
的字符,除非你做字符串操作。它们只会被表示为代理对,但是如果你把string
作为一个整体来对待,你不需要知道这些。一个例外是一些字符串操作方法不能正常工作,例如
"\U0001F4A9".Substring(1)
将返回代理项对的后半部分,这不是一个有效的字符串。toe950273#
如果问题是,
我如何将“一堆便便”表情符号U+1F 4A 9放入一个C#字符串常量中,因为它需要32位才能在UTF-16代码页中表示?
那么答案就是:
在Visual Studio的C#交互式窗口中,将显示以下输出:
请注意大写
\U
转义码的使用。它必须后跟正好八个十六进制数字,这与\u
不同,\u
必须后跟正好四个十六进制数字。请参见C#语言参考中的Unicode字符转义序列。还要注意,
"\U0001F4A9".Length
的计算结果为2
,因为Length
总是返回字符串中16位字符的数目,而不是字符串中Unicode字符的数目。当字符串被打印出来时,只要编码转换过程正确执行,就应该只看到一个字符。
请注意,
U+1F4A9
是OP问题中链接的示例表情符号。