我想在文档中将弯曲的单引号和双引号转换为中性引号。我以为这应该很简单,就像
请注意,一个双引号“在右侧成为了一整套字符。在第二个例子中,这种情况发生了三次。
而且,更令人意外的是,即使对于这个微不足道的情况,三重现象也会发生。
我还尝试了使用
什么解释了tr///的上述行为?
perl -pe 'tr/“”’/""\047/'
一样,但是这并不起作用。例如:snafu$ echo '“' | perl -pe 'tr/“”’/""\047/'
""'
snafu$ echo '“”’' | perl -pe 'tr/“”’/""\047/'
""'""'""'
请注意,一个双引号“在右侧成为了一整套字符。在第二个例子中,这种情况发生了三次。
而且,更令人意外的是,即使对于这个微不足道的情况,三重现象也会发生。
snafu$ echo '“' | perl -pe 'tr/“/"/'
"""
这种行为似乎与我在ASCII字符中看到的非常不同,像这样:
snafu$ echo "Larry Wall" | perl -pe 'tr/ay/AY/'
LArrY WAll
我还尝试了使用
perl -Mutf8
进行调用,但结果并不如我所预期的那样。# not triplicated, but also not transliterated
snafu$ echo '“' | perl -Mutf8 -pe 'tr/“”’/""\047/'
“
什么解释了tr///的上述行为?
:utf8
;你应该使用:encoding(UTF-8)
。 - ikegami-CS
是对待utf8
的方式(Perl 特定的扩展),而不是UTF-8
(标准)。 - ikegami-CS
是个明智的选择,因为-C1
无论如何都不够用。那只会处理标准输入,但你还需要处理标准输出。这意味着你至少需要-C3
,也就是-CIO
。你可以使用“é”进行测试。 - ikegami-C
数字是一个位掩码(1:STDIN,2:STDOUT,4:STDERR),而不是对文件描述符的引用。(如果是的话,解码STDIN应该是-C0
,而不是-C1
!) - ikegami