【问题标题】:Highest usable UNICODE character最高可用 UNICODE 字符
【发布时间】:2019-11-27 09:33:27
【问题描述】:

我正在编写一个将大数字保存到文件中的例程,但我不想将实际数字写为字符串(例如 999999),而是使用其等效的 UNICODE 字符(例如 ???? ),无论它实际上是否对应于可见或可识别的字符。排除代理对,有谁知道哪些数值对应于一个 Unicode 字符?我问这个是因为我注意到某些数值对应于两个字符的 Unicode 代码点。前任。 999999 对应 ????,而 999998 对应????。

【问题讨论】:

  • 这听起来像是一个 XY 问题。如果您不在乎它们是否是真的文本,为什么还要将这些值视为文本呢?为什么不把它全部写成二进制文件呢?像处理文本一样处理任意数字听起来像是解决问题的方法。
  • 为什么要假装它是Unicode?如果您打算使用 Unicode 代码点(不是字符,它们不连续)仅仅是为了它们的价值,那么您根本不会得到字符。然后,几乎不需要额外的努力来摆脱它们是字符的伪装,而只需编写代码点(使用尽可能多的位数)。代理人足够棘手,不会将它们拖入甚至不会出现的问题区域!
  • 我同意@JonSkeet 的观点,您应该只使用StreamWriter 以二进制形式写入数字。打开文件时,它无论如何都会被表示为 glibberish。
  • @RenéCarannanante:不,StreamWriter 仍然是文本。你的意思是BinaryWriter
  • @jdweng:你所说的适用于 UTF-8(它保持与 ASCII 的兼容性)。有不同的字符编码方式;在 UTF-16 中,09 的字符在编码时占用两个字节。 “Unicode”是一个涵盖整个标准的广义术语,它通常会导致字符(我们看到的东西)、代码点(用于表示它们的数字)和编码(这些数字最终以比特结尾的方式)之间的混淆。

标签: c# unicode


【解决方案1】:

Unicode 当前定义为以 10_ffff₁₆ = 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

【讨论】:

猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2011-12-26
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多