阻止 bash 打印无效的 unicode 序列

阻止 bash 打印无效的 unicode 序列

在 bash 中执行echo -e "\uDDAA"(这不是有效的 utf-8 代码点),打印���.

如果它不是有效的代码点,如何使其不打印任何内容?



我想做的是在所有代码点前面添加姓名列表.txt,它代表的字符。现在我把它作为

sed -e 's/\<\([0-9A-F]\{4,6\}\)\>/\\U\1 \1/g' < NamesList.txt | while read -r line;do echo -e "$line"; done | sponge NamesList.txt

如果有更好的方法可以完全解决该问题,请发布该解决方案

答案1

您不应该首先创建这些序列。这将打印控制字符 ( \pC) 的空格,并为标记 ( \pM) 提供一个可以骑乘的空格:

perl -CO -pe 's{^([0-9A-F]+)\b}{$x=$1,$c=chr hex $x;if($c=~/\pC/){$c=" "}elsif($c=~/\pM/){$c=" $c"}"$c $x"}e' NamesList.txt

-i NamesList.txt如果您想就地编辑文件,请使用)

Unicode 字符属性。您不希望显示的代理、双向标记和其他控件位于“其他”类别 ( \pC) 中。重音符号和其他组合标记属于“标记”类别 ( \pM)。

相关内容