在容量不足的编码方案中编码时,具有大代码点的字符串是什么样子的



在阅读了Joel关于Unicode的文章后,我仍然对自己的Unicode知识感到非常不确定。具体来说,我还有一个问题:

假设我有一个代码点太大的字符串,无法放入某些编码(即ASCII),例如:

U+67CF U+1AAB U+ABCD U+7034

然后Joel说:

如果您尝试的Unicode代码点没有等效代码在你试图用的编码中表示,你通常会打一个小问号:?或者,如果你真的很好盒

但是这个字符串(在二进制/十六进制级别)是什么样子的,用ASCII编码或其他一些大小不足的编码?

如果转换字符串ユニコード"对于ASCII,ASCII中没有定义的代码可以表示这些字符中的任何一个。然后应该做什么完全取决于转换软件。通常,软件会用"?",即ASCII问号字符。该字符串是一个包含常规ASCII问号字符的常规ASCII字符串。

请参阅Joel文章的更深入后续文章,了解每个程序员绝对、积极地需要知道的关于编码和字符集的信息。

引用的语句没有多大意义。如果一个编码没有Unicode代码点的代码,那么你就无法在其中表示该代码点。仅此而已。例如,你无法在ASCII中表示"é"。

也许这句话的意思是,如果你试图将字符串从一种编码转换为另一种编码,而字符串中的某些字符在目标编码中没有表示形式,那么你可能会看到奇怪的字符。嗯,是的,但你也可以看到其他任何东西。转换程序可以将"é"映射到"e",也可以发出错误消息并拒绝正确生成输出。通常情况下,后者是正确的动作。

但在某些情况下,转换是在飞行中进行的,不能纠缠在人类互动中,但必须做一些的事情。当然,这不再是字符代码转换,而是更广泛意义上的转换。它可以应用许多不同的策略,比如删除字符,或者通过一些逻辑将它们映射到可表示的字符或字符组合,甚至更改目标编码。

相关内容

最新更新