C# 最高可用UNICODE字符

C# 最高可用UNICODE字符,c#,unicode,C#,Unicode,我正在编写一个将大量数字保存到文件中的例程,但我不想将实际数字写入字符串(例如999999),而是希望使用其等效的UNICODE字符(例如UNICODE当前定义为以10ffff结尾)₁₆ = 1_114_111₁₀. 有些语言可以放宽这一限制,例如 #!/usr/bin/env perl "\x{7fff_ffff_ffff_ffff}"; # ÿ¿¿¿¿¿¿¿¿¿¿ encode "UTF8", "\x{7fff_ffff_ffff_ffff}"; # 0xff 0x80 0x87 0xbf

我正在编写一个将大量数字保存到文件中的例程,但我不想将实际数字写入字符串(例如999999),而是希望使用其等效的UNICODE字符(例如UNICODE当前定义为以10ffff结尾)₁₆ = 1_114_111₁₀. 有些语言可以放宽这一限制,例如

#!/usr/bin/env perl
"\x{7fff_ffff_ffff_ffff}";
# ÿ¿¿¿¿¿¿¿¿¿¿
encode "UTF8", "\x{7fff_ffff_ffff_ffff}";
# 0xff 0x80 0x87 0xbf 0xbf 0xbf 0xbf 0xbf 0xbf 0xbf 0xbf 0xbf 0xbf

这听起来像是一个XY问题。如果你不在乎这些值是否真的是文本,为什么要把它们当作文本来对待呢?为什么不把它们全部写成一个二进制文件呢?像处理文本一样处理任意数字听起来像是一个问题的秘诀。如果你要使用Unicode代码点,为什么要假装它是Unicode呢(不是字符,那些不是连续的)仅仅为了它们的值,你根本不会得到字符。因此,不需要额外的努力就可以去掉它们是字符的伪装,只需编写代码点(使用最大数字所需的位数)。如果不将代理拖到问题区域而不出现代理,代理就足够棘手了!我同意@JonSkeet的观点,您应该使用
StreamWriter
以二进制形式写入数字。打开文件时,它无论如何都会表现为油嘴滑舌。@RenéCarannante:不,
StreamWriter
仍用于文本。是吗意思是
BinaryWriter
?@jdweng:你所说的适用于UTF-8(它保持与ASCII的兼容性)。有不同的字符编码方式;在UTF-16中,
0
9
的字符编码时占两个字节。“Unicode”是一个涵盖整个标准的广义术语,通常会导致字符(我们看到的东西)、代码点(用来表示它们的数字)和编码(这些数字最终以位的形式结束)之间的混淆。错误。Unicode限制为U+10ffff,而不是U+1FFFF。@phuclv您可以编辑答案来改进它。是否删除nugatory下一票?