Perl Unix版权符号不工作
当我尝试在perl中向变量插入版权符号值时,它会转换为另一个符号 我需要Perl Unix版权符号不工作,perl,unix,Perl,Unix,当我尝试在perl中向变量插入版权符号值时,它会转换为另一个符号 我需要 $a=©; 但我是这样的 $a =© 请告诉我解决方案好的-您需要了解一些字符编码 有一种称为字符集的东西——它是一组命名的有效字符(“a”、“z”、“1”、“1”等)。perl字符串通常包含字符。Perl的字符集包括世界上的一切(甚至更多) 现在,集合中的每个字符都有一个数字(代码点),因此我们知道我们在谈论什么(在许多集合中为65=“a”,但不一定是所有集合)。传统上,不同的国家/计算机公司为某些字符制定了自己的
$a=©;
但我是这样的
$a =©
请告诉我解决方案好的-您需要了解一些字符编码 有一种称为字符集的东西——它是一组命名的有效字符(“a”、“z”、“1”、“1”等)。perl字符串通常包含字符。Perl的字符集包括世界上的一切(甚至更多) 现在,集合中的每个字符都有一个数字(代码点),因此我们知道我们在谈论什么(在许多集合中为65=“a”,但不一定是所有集合)。传统上,不同的国家/计算机公司为某些字符制定了自己的代码(在英国,“英镑”被认为很重要,而在美国则不太重要)。因此,我们需要知道在交换信息时要使用什么字符集 然而,当我们通过网络写入文件或发送消息时,我们会写入字节,字节只能容纳数字0-255。那么-我们如何处理代码点大于255的字符呢 我们需要一个编码。这是一组规则,说明如何将代码点转换为字节 Unicode是一个字符集,包含几乎所有使用过的书写符号(它们也不断添加到其中)。它有许多编码,也许最常见的是UTF-8。UTF-8编码对大于127的数字使用多个字节(谷歌,如果你关心原因的话) ISO-8859-1是基于欧洲的字符集和编码(每个字符一个字节)。ISO-8859-15对其进行了修订,其中引入了“欧元”符号。在Unicode标准中,两者都只包含一小部分字符(没有阿拉伯文、中文、笑脸等) 如果不理解ISO-8859-1中的文件的含义,就无法区分ISO-8859-15中的文件和ISO-8859-1中的文件。在一种情况下,字节0xA4在另一种情况下表示“€” 有时可能会发现UTF-8文件,因为它对如何生成大型代码点有一定的规则 在您的情况下,这两个字符代表版权符号?它们是该字符的UTF-8编码。你大概是用ISO-8859或Windows之类的东西打的 下面是一个小脚本来说明我的意思。它以两种编码方式打印“test™”,显示用于这两种编码的字节(八位字节)。您的终端将仅成功显示一个
#!/usr/bin/perl
use strict;
use warnings;
use Encode qw(encode);
print_charcodes('UTF-8', 'test'.chr(169));
print_charcodes('ISO-8859-1', 'test'.chr(169));
exit;
sub print_charcodes {
my ($enc, $chars) = @_;
my $octets = encode($enc, $chars, Encode::FB_CROAK);
my @codes = map { ord $_ } split('', $octets);
print sprintf('%11s : ',$enc), join(" ", @codes), " : $octets", "\n"
}
这是你在21世纪处理角色所需要知道的最低限度。当你开始尝试处理这些东西时,会有大量的细节(数字是什么?标点符号是什么,如何使用小写?)。阅读血淋淋的细节。哦,当您这样做的时候,请记住Perl应该比大多数语言在这方面做得更好
附言-Unicode专家。是的,我意识到这过于简化了许多微妙的细节,但我想传达基本信息,而不是像链接文章那样让人害怕。好的-你需要了解一些字符编码 有一种称为字符集的东西——它是一组命名的有效字符(“a”、“z”、“1”、“1”等)。perl字符串通常包含字符。Perl的字符集包括世界上的一切(甚至更多) 现在,集合中的每个字符都有一个数字(代码点),因此我们知道我们在谈论什么(在许多集合中为65=“a”,但不一定是所有集合)。传统上,不同的国家/计算机公司为某些字符制定了自己的代码(在英国,“英镑”被认为很重要,而在美国则不太重要)。因此,我们需要知道在交换信息时要使用什么字符集 然而,当我们通过网络写入文件或发送消息时,我们会写入字节,字节只能容纳数字0-255。那么-我们如何处理代码点大于255的字符呢 我们需要一个编码。这是一组规则,说明如何将代码点转换为字节 Unicode是一个字符集,包含几乎所有使用过的书写符号(它们也不断添加到其中)。它有许多编码,也许最常见的是UTF-8。UTF-8编码对大于127的数字使用多个字节(谷歌,如果你关心原因的话) ISO-8859-1是基于欧洲的字符集和编码(每个字符一个字节)。ISO-8859-15对其进行了修订,其中引入了“欧元”符号。在Unicode标准中,两者都只包含一小部分字符(没有阿拉伯文、中文、笑脸等) 如果不理解ISO-8859-1中的文件的含义,就无法区分ISO-8859-15中的文件和ISO-8859-1中的文件。在一种情况下,字节0xA4在另一种情况下表示“€” 有时可能会发现UTF-8文件,因为它对如何生成大型代码点有一定的规则 在您的情况下,这两个字符代表版权符号?它们是该字符的UTF-8编码。你大概是用ISO-8859或Windows之类的东西打的 下面是一个小脚本来说明我的意思。它以两种编码方式打印“test™”,显示用于这两种编码的字节(八位字节)。您的终端将仅成功显示一个
#!/usr/bin/perl
use strict;
use warnings;
use Encode qw(encode);
print_charcodes('UTF-8', 'test'.chr(169));
print_charcodes('ISO-8859-1', 'test'.chr(169));
exit;
sub print_charcodes {
my ($enc, $chars) = @_;
my $octets = encode($enc, $chars, Encode::FB_CROAK);
my @codes = map { ord $_ } split('', $octets);
print sprintf('%11s : ',$enc), join(" ", @codes), " : $octets", "\n"
}
这是你在21世纪处理角色所需要知道的最低限度。当你开始尝试处理这些东西时,会有大量的细节(数字是什么?标点符号是什么,如何使用小写?)。阅读血淋淋的细节。哦,当您这样做的时候,请记住Perl应该比大多数语言在这方面做得更好
附言-Unicode专家。是的,我意识到这过于简化了许多微妙的细节,但我想传达基本信息,而不是像链接文章那样让人害怕。问题是你是如何得到你所得到的: 在UTF-8中,
)
表示为两字节字符A9 C2
在Windows代码页1250中,默认代码为p