如何在Perl中显示192个字符的符号( └ )?
如何在Perl中显示192个字符的符号( └ )?
perldoc perluniintro
中。你可以使用\x{nnnn}
,其中n是十六进制标识符,或者使用\N{...}
和名称。perl -E 'say "\x{2514}"; use charnames; say "\N{BOX DRAWINGS LIGHT UP AND RIGHT}"'
\N{U+2514}
。更多详细信息请参见perlunicode。看起来是代码页 437 编码。Perl 可能只是输出您提供的字节。而您的终端可能期望 UTF8。
因此,您需要将其解码为 Unicode,然后重新编码为 UTF-8。
编辑:正确的编码。
像往常一样,Jon Skeet把问题点破了:代码192
在“扩展ASCII”范围内。我建议你遵循@Douglas Leeder的建议,但我不确定www.LookupTables.com提供的是哪种编码;ISO-8859-1
认为192映射为“À”,而Mac OS Roman
则为“¿”。
用户表示他们想使用Latin-1扩展字符集中的字符,因此让我们从这个块尝试一个示例!所以,如果他们想要Æ
字符,他们会运行...
print "\x{00C6}";
输出:�
等等,刚才发生了什么?您会注意到调用UTF-8的其他方式, 如char(...)
, \N{U+...}
和甚至unpack(...)
也有相同的问题。没错 - 问题不在于任何这些函数,而是在底层的字符抽象层中。在这种情况下,您需要尽早指示此层。
use open qw( :std :encoding(UTF-8) );
print "\x{00C6}";
输出:Æ
现在我可以正确拼写“Ælf”了!
在PerlDoc中有一个注释,涉及到chr()
函数....
请注意,默认情况下,128到255(含)之间的字符由于向后兼容性原因,在内部不会被编码为UTF-8。
因此,这个特殊块需要使用特殊的use open
来指示标准编码。