【问题标题】:How to display Regional Status Indicators (country flags) in the terminal如何在终端中显示区域状态指示器(国家标志)
【发布时间】:2018-10-09 12:43:45
【问题描述】:

如何在 Linux 终端中显示区域状态指示器(例如国家标志)?这甚至可能吗?

我正在编写一个 VPN 客户端,并希望为客户端所包含的国家/地区添加一些标志。例如,我想展示日本国旗(??????????)。我在 Bash 脚本中将两个 Unicode 符号 ???????? 彼此相邻粘贴,但是在终端中运行脚本时,我只是将这两个符号彼此相邻(它们没有“合并”) .例如,我在下面有部分文件(请注意,符号之间有一个空格,因此它们不会在浏览器中“合并”,实际脚本中没有空格)。

#!/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 ]
...

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

编辑:我注意到一些回答者无法理解我的问题,因此我提供了运行此脚本时终端的屏幕截图。

【问题讨论】:

    标签: bash emoji gnome-terminal


    【解决方案1】:

    不确定您是否复制了正确的字节序列,但您可以简单地使用正确的转义符:

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

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

    【讨论】:

    • 我尝试过使用转义符,但没有成功。我确认终端在渲染序列时遇到问题,但我的问题是是否可以解决这个问题(可能使用终端字体等)
    • 检查echo -e '\U1f1ef\U1f1f5' | hexdump -C的输出。假设您使用的是 UTF-8 语言环境,输出应指示 bash 生成字节 f09f87aff09f87 和 @ 987654331@ 表示两个 Unicode 字符。您的终端必须设置为使用 UTF-8,以便它知道将这 8 个字节重新组合成预期的 Unicode 字符。最后,您的终端还必须配置为使用一种字体,该字体可以为终端的渲染引擎提供正确的标志字形以用于显示该对。
    • 我检查了hexdump 的输出,一切都很好(虽然最后有一个0a...),我还确认终端使用的是UTF-8 字符编码。经过一番研究,似乎 Monospace [Regular](我使用的字体)支持各种字形,但不支持标志字形?我不确定,尽管我认为我会遇到这个问题。我的问题是解决方法。
    • 没有编程解决方法。您正在正确写入显示标志所需的字节;这纯粹是配置您的终端以使其能够正确显示的问题,这就是我将您引导至 superuser.com 的原因。
    • 好的...你把我指向了超级用户?
    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 2020-08-10
    • 2020-08-31
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    相关资源
    最近更新 更多