【问题标题】:OS X - Using printf in bash with Unicode characters does not render some charactersOS X - 在 bash 中使用带有 Unicode 字符的 printf 不会呈现某些字符
【发布时间】:2015-12-12 13:54:50
【问题描述】:

我创建了一个脚本,可以打印出一系列 Unicode 字符。一些更具异国情调的角色无法正常工作。特别试图使Latin Extended-D 字符工作。我试过使用 Cardo 字体,但没有帮助。我想我一次只能发布 2 个链接,所以不能提供该链接。任何帮助表示赞赏。这是脚本:

#!/usr/local/bin/bash

COUNT=0

for i in $( seq $1 $2);
do
    x=$( printf "%X" "$i" );
    printf "\U$x";
    COUNT=$((COUNT+1));
    if [ $COUNT -gt $3 ]
        then
            COUNT=0;
            printf "\n";
    fi
done

printf "\n"

这是终端的样子image

【问题讨论】:

  • 缺少哪些字符? Latin Extended-D 块包含一大段未分配的字符。

标签: bash unicode


【解决方案1】:

正如评论中提到的,这些字符在终端中“不起作用”,因为它们不存在! Unicode 联盟尚未定义 Unicode 字符 U+A7AE、U+A7AF 和 U+A7B8–A7F6(十进制:42926、42927 和 42936–42998),因此它们没有可打印的形式。 (它们对应于您链接的 PDF 的第二页上的交叉阴影框。)

【讨论】:

    【解决方案2】:

    此代码打印一张类似于 UNICODE 联盟的表格:

    #!/usr/local/bin/bash
    
    set   -- 42784 43007
    for   j in {0..15};
    do
          for   (( i=$1; i<=$2; i+=16 ));
          do
                k="$((i+j))"
                #printf '%4x ' "$k"
                printf "%b" $( printf '\\U0%x' "$k" );
          done
          printf "\n"
    done
    

    但是没有办法“看到”所有代码点,因为许多代码点还没有字形 (A788-A7F6)。 换句话说:代码点(数字)仍然没有分配一个字符。 您选择哪种字体都没有关系,任何字体都不应在这些代码点中包含字符(A788-A7F6)。

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 1970-01-01
      • 2014-10-27
      • 2016-04-15
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多