也许我不需要32位字符串,但我需要代表32位字符
http://www.fileformat.info/info/unicode/char/1f4a9/index.htm 现在我抓住了symbola字体,当我粘贴它时(在网址或任何文本区域)可以看到该字符,所以我知道我有它的字体支持.
但是我如何在我的C#/ .NET应用程序中支持它?
- 编辑 - 我会添加一些东西.当我在.NET winform应用程序中粘贴所述字符时,我没有正确地看到该字符.当它粘贴到Firefox中时,我确实看到了它.如何在winform应用程序中正确查看字符?
我有一个工作算法将UTF-8字符串转换为UTF-32字符串,但是,我必须提前为我的UTF-32字符串分配所有空间.有没有办法知道UTF-32中有多少字符会占用UTF-8字符串.
例如,UTF-8字符串"¥0"是3个字符,一旦转换为UTF-32,则是2个无符号字符.有没有办法知道转换之前我需要的UTF-32'字符数'?或者我将不得不重新编写算法?
在在线diveintopython3书中,它说utf-32和utf-16的优点是
UTF-32 是一种简单的编码;它接受每个 Unicode 字符(一个 4 字节的数字)并用相同的数字表示字符。这有一些优点,最重要的是您可以在恒定时间内找到字符串的第 N 个字符,因为第 N 个字符从第 4×N 个字节开始
有人可以解释一下吗?如果可能的话,举个例子..我不确定我是否完全理解它
在读到Unicode时,我听过很多次,UTF-32是固定宽度编码.
将固定宽度编码表示"将源符号映射到一定数量的位的代码",并且假设所讨论的源符号是Unicode代码点,这一切都是有意义的.但是,如果您认为源符号的基础语言是字形,那么事情会变得复杂得多.
所以我的问题是,在字面意义上,UTF-32真的是一个固定长度的编码?如果没有,那么在这个意义上是否有可能的固定长度编码?
我有一个C#方法需要检索字符串的第一个字符,并查看它是否存在于包含特定unicode字符的哈希集中(所有从右到左的字符).
所以我在做
var c = str[0];
Run Code Online (Sandbox Code Playgroud)
然后检查hashset.
问题是这个代码不适用于第一个char的代码点大于65535的字符串.
我实际创建了一个循环,遍历0到70,000之间的所有数字(最高RTL代码点大约68,000,所以我向上舍入),我从数字创建一个字节数组,并使用
Encoding.UTF32.GetString(intValue);
Run Code Online (Sandbox Code Playgroud)
用这个字符创建一个字符串.然后我将它传递给在HashSet中搜索的方法,并且该方法失败,因为它何时获得
str[0]
Run Code Online (Sandbox Code Playgroud)
这个价值永远不会是应有的.
我究竟做错了什么?
维基百科告诉我 UTF-32 编码使用的位数是 32 位,那么为什么这给了我 64 位的长度呢?
>>> Bits(bytes = 'a'.encode('utf-32')).bin
'1111111111111110000000000000000001100001000000000000000000000000'
>>> len(Bits(bytes = 'a'.encode('utf-32')).bin)
64
Run Code Online (Sandbox Code Playgroud)
UTF-32 应该是一个 4 字节的定长字符集,根据我的理解,每个字符都有定长表示在 32 位内,然而,上面代码的输出是 64。这是怎么回事?