OS X - 在带有Unicode字符的bash中使用printf不会呈现某些字符

时间:2015-12-11 23:48:51

标签: bash unicode

我创建了一个打印出一系列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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

此代码打印一个类似于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

但是没有办法&#34;看&#34;所有代码点,因为许多代码点还没有字形(A788-A7F6)。 换句话说:代码点(数字)仍然没有分配字符。 您选择哪种字体无关紧要,这些代码点中的字体不应包含任何字符(A788-A7F6)。