现代终端通常会正确呈现所有 utf-8 字符吗?

Do modern terminals generally render all utf-8 characters correctly?

我正在用 C 编写一个应用程序,它将在终端中 运行,使用一些较少使用的 unicode 字符会很方便但不是必需的。从我的实验来看,我在渲染它们时没有遇到任何问题。但是,如果将来可能出现问题,我不会使用任何非 ascii 字符。

所以,简而言之,我能否指望现代 *nix 世界(主要是 linux、freebsd 和 osx)中的任何终端或终端仿真器来正确呈现任意 utf- 8 个字符?

如果我不能做出这样的假设,那么存在为各种目的定义的特定 unicode 字符子集,那么某些这样的子集是否至少可以在任何可能的现代 *nix 终端或终端模拟器中可靠地呈现?

注意:当我说任意时,我的意思是任意:任何 unicode 字符。但是为了我的问题的完整性,我会注意到我主要对箭头和数学字符感兴趣,这个 link 有两个列表:https://en.wikipedia.org/wiki/Unicode_symbols.

不,你不应该这样认为。即使在现代系统中,安装的字体集、终端应用程序使用的字体以及LANGLC_*等环境变量也可能影响某些字符能否在屏幕上正确显示。终端与否。

您或许可以根据 TERMLANGLC_* 环境变量的值来合理猜测支持的内容,但它仍然会是一个猜测。我建议要么根本不依赖它,要么提供一些 enabling/disabling 使用方法(通过环境变量 and/or 通过应用程序的命令行标志)。

在大多数情况下,这取决于字体,而不是终端。但是终端软件必须考虑几件事。例如,halfwidth and fullwidth forms 个 CJK 字符。

此外,我们会定期添加 Unicode 字符。不可能在新版本的 Unicode 标准发布后立即自动更新所有字体和终端软件。

一般来说,您应该假设总是有未正确呈现的 Unicode 字符,即使在现代终端上也是如此。