如何在终端显示区域状态指示器(国旗)

4
您如何在Linux终端中显示区域状态指示器(例如国旗)?这是否可能?我正在编写一个VPN客户端,并希望包括一些国家的标志。例如,我想显示日本国旗()。我将两个Unicode符号并排粘贴到Bash脚本中,但在终端中运行脚本后,我只得到了两个并排的符号(它们没有“合并”)。为了举例说明,下面是文件的一部分(请注意,符号之间有一个空格,以防止它们在浏览器中“合并”,实际脚本中没有空格)。
#!/bin/bash
echo "Please choose a server:"
echo -e "  Japan (1)"     # in the real script there is no space here.
echo -e "..."
read -p "> " choice
...

运行后:

$ ./script.sh
Please choose a server:
  Japan (1)            [ with no space in between ]
...

我理解区域状态指示符的概念,但我的问题是是否可以在终端中使用它们。

编辑:我注意到一些回答者有困难理解我的问题,因此我提供了一个截图,显示当我运行这个脚本时我的终端是什么样子。 终端中的区域状态指示器示例

1个回答

4

您不确定是否复制了正确的字节序列,但您可以直接使用正确的转义符。

$ echo -e "\U1f1ef\U1f1f5 Japan (1)"
 Japan (1)

这可能与您的终端理解Unicode序列并正确呈现它有关,而不是与您的脚本有问题。


我尝试过使用转义字符,但没有成功。我确认终端有问题无法渲染该序列,但我的问题是是否可能通过其他方式解决这个问题(例如使用终端字体等)。 - Anonymous
1
请检查 echo -e '\U1f1ef\U1f1f5' | hexdump -C 的输出。假设您正在使用UTF-8语言环境,则输出应指示bash为这两个Unicode字符生成了字节f09f87aff09f87b5。您的终端还必须设置为使用UTF-8,以便它知道如何将这8个字节重新组合成所需的Unicode字符。最后,您的终端还必须配置为使用可以提供正确国旗图标的字体,以供终端呈现引擎用于显示该对字符。 - chepner
我检查了hexdump的输出,一切正常(不过末尾有一个0a...),我还确认终端正在使用UTF-8字符编码。经过一些研究,似乎Monospace [Regular](我使用的字体)支持各种字形,但不支持旗帜字形?我不确定,虽然我想我会遇到这个问题。我的问题是要找到一个解决方法。 - Anonymous
好的...你让我去超级用户了? - Anonymous
1
有关此事是否有任何更新?我也遇到了类似的问题,即打印 J P 而不是国旗。 - Izaz
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接