c# - 通过\u或\x为一个字符分配一个非常大的十六进制

标签 c# unicode char

char k = '\u103BD';

我收到编译时错误
我想将以下字符放入我的字符 k 中,但转义序列似乎不会接受超过 4 数字。
这种情况我该怎么办? enter image description here

最佳答案

字符char两个字节值,这就是为什么它只能在[\u0000..\uFFFF]范围内。 如果您正在寻找超过\uFFFF的值,请注意,它应该表示为两个字符结构,例如字符串:

string result = "\U000103BD"; // note Capital U, 8 hex digits

Console.Write(result);

输出:

𐎽

如果您想明确地使用这两个字符,您可以使用下面的解码:

public static (char left, char right) Decode(int code) {
  if (code < 0x10000)
    throw new ArgumentOutOfRangeException(nameof(code));

  return (
    (char)(((code - 0x10000) >> 10) + 0xD800),
    (char)(((code - 0x10000) & 0b1111_111_111) + 0xDC00)
  );
}

演示:

(char left, char right) = Decode(0x103BD);

Console.Write(string.Concat(left, right));

输出:

𐎽

最后,从 .Net 6 开始,您可以使用 Rune使用这些字符对进行操作的结构:

Rune rune = new Rune(0x103BD);

Console.Write(rune);

输出:

𐎽

关于c# - 通过\u或\x为一个字符分配一个非常大的十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73595578/

相关文章:

c# - 如何在 C# 代码中连接到 azure cosmos db 帐户而不使用主键

c# - 有什么方法可以在 sql server 中将数据库名称设置为全局名称?

powershell - 使用 Powershell 删除 unicode 字符

c# - 获取特定的 Xml 节点

c# - 将文件复制到不同的目录

c++ - C++ 中的 UTF-8 兼容性

python - 如何使用python将阿拉伯字符映射到英文字符串

c++ - Char 的大小与字符串不同

C 在 execvp 中传递一个参数和两个参数

java - Char 到 Int 转换 Java