我正在用C语言写一个将在终端中运行的应用程序,使用一些较少使用的unicode字符会很方便但不是必需的。从我的实验中,我没有遇到任何麻烦。但是,如果将来可能出现麻烦,我不会使用任何非ascii字符。
因此,简而言之,我可以依靠现代* nix世界中的任何终端或终端模拟器(主要是linux,freebsd和osx)来正确渲染任意utf-8字符吗?
如果我不能做出这样的假设,那么为特定目的定义了特定的unicode字符子集,那么至少可以在任何可能的现代* nix终端或终端仿真器中可靠地呈现某些这样的子集吗?
注意:当我说任意时,我的意思是任意的:任何unicode字符。但为了完整我的问题,我会注意到我主要对箭头和数学字符感兴趣,此链接包含两个列表:https://en.wikipedia.org/wiki/Unicode_symbols。
答案 0 :(得分:6)
不,你不应该这么认为。即使在现代系统中,安装的字体集,终端应用程序使用的字体以及LANG
,LC_*
等环境变量也可能影响某些字符是否可以正确显示在终端与否。
您可以根据TERM
,LANG
和LC_*
环境变量的值,对支持的内容进行合理的猜测,但它仍然是一个猜测。我建议要么根本不依赖它,要么提供一些启用/禁用使用的方法(通过环境变量和/或通过命令行标志到应用程序)。
答案 1 :(得分:1)
在大多数情况下,这取决于字体,而不是终端。但终端软件必须考虑到一些事情。例如,halfwidth and fullwidth forms个CJK字符。
此外,还会定期添加Unicode字符。一旦发布新版本的Unicode标准,就不能自动更新每个字体和终端软件。
通常,您应该假设即使在现代终端上也始终无法正确呈现Unicode字符。