Perl 6 error: Malformed UTF-8
Perl 6 error: Malformed UTF-8
现在,我正在学习 Perl 6;我的第一个项目是做一个 HTTP 客户端..我得到一个错误,我不明白为什么
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
我认为它来自端口变量,但我不确定
这是我所有的 perl6 代码:
class Request
{
has $!method;
has $!path;
has $!version;
has @!headers;
has $!socket;
has $.response is rw;
method new(:$method, :$path, :$host, :$port, :$version = "HTTP/1.1")
{
my $socket = IO::Socket::INET.new(:$host, :$port);
return self.bless(:$method, :$path, :$version, :$socket);
}
submethod BUILD(:$!method, :$!path, :$!version, :$!socket){}
method setHeader($name, $value)
{
my %header = name => $name, value => $value;
@!headers.push({%header});
}
method toString
{
my $request = "$!method $!path $!version\r\n";
for @!headers -> %_ {
$request ~= %_{'name'} ~ ": " ~ %_{'value'} ~ "\r\n";
}
$request ~ "\r\n";
}
method send($i = 1)
{
say "Request send!";
$!socket.print($.toString());
say $!socket.recv for 0..$i;
}
}
my $host = "127.0.0.1";
my Int $port = 58002;
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
$request.setHeader("host", $host);
$request.setHeader("Accept-Language", "fr");
$request.send(2);
这个答案可能没有帮助,可能很烦人,但我可以在今天晚些时候删除它,如果有的话,我已经知道了,我必须 运行。
我不知道你是否理解错误信息,但让我们先介绍一下。
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
这意味着在执行消息的最后一行,即您的 代码 的第 43 行时,出了点问题:
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
编译器注意到最后一行的执行涉及通过代码中另一行的路径,第 13 行:
return self.bless(:$method, :$path, :$version, :$socket);
这样有助于更好地查明执行过程中发生错误的行。
.bless
是一个方法调用。它在 self
上调用,它指的是传递给方法的调用者,您可以假设它是 class 的对象,其中出现方法调用,即您定义的 class Request
.
您的代码未指定 class Request
继承自(使用 is
)的内容,因此它继承自 Any
。 Any
的 bless
继承自 Mu
's。
在 Rakudo 编译器中是 this code:
method bless(*%attrinit) {
nqp::create(self).BUILDALL(Empty, %attrinit);
}
因此,在执行该代码期间,Perl 6 试图读取一些 UTF8,并在它试图读取的某些 data 的第一行的第 45 列遇到了一个无效字符。
这就是我能说的最好的原因,没有看到你的数据。
现在,我正在学习 Perl 6;我的第一个项目是做一个 HTTP 客户端..我得到一个错误,我不明白为什么
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
我认为它来自端口变量,但我不确定 这是我所有的 perl6 代码:
class Request
{
has $!method;
has $!path;
has $!version;
has @!headers;
has $!socket;
has $.response is rw;
method new(:$method, :$path, :$host, :$port, :$version = "HTTP/1.1")
{
my $socket = IO::Socket::INET.new(:$host, :$port);
return self.bless(:$method, :$path, :$version, :$socket);
}
submethod BUILD(:$!method, :$!path, :$!version, :$!socket){}
method setHeader($name, $value)
{
my %header = name => $name, value => $value;
@!headers.push({%header});
}
method toString
{
my $request = "$!method $!path $!version\r\n";
for @!headers -> %_ {
$request ~= %_{'name'} ~ ": " ~ %_{'value'} ~ "\r\n";
}
$request ~ "\r\n";
}
method send($i = 1)
{
say "Request send!";
$!socket.print($.toString());
say $!socket.recv for 0..$i;
}
}
my $host = "127.0.0.1";
my Int $port = 58002;
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
$request.setHeader("host", $host);
$request.setHeader("Accept-Language", "fr");
$request.send(2);
这个答案可能没有帮助,可能很烦人,但我可以在今天晚些时候删除它,如果有的话,我已经知道了,我必须 运行。
我不知道你是否理解错误信息,但让我们先介绍一下。
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
这意味着在执行消息的最后一行,即您的 代码 的第 43 行时,出了点问题:
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
编译器注意到最后一行的执行涉及通过代码中另一行的路径,第 13 行:
return self.bless(:$method, :$path, :$version, :$socket);
这样有助于更好地查明执行过程中发生错误的行。
.bless
是一个方法调用。它在 self
上调用,它指的是传递给方法的调用者,您可以假设它是 class 的对象,其中出现方法调用,即您定义的 class Request
.
您的代码未指定 class Request
继承自(使用 is
)的内容,因此它继承自 Any
。 Any
的 bless
继承自 Mu
's。
在 Rakudo 编译器中是 this code:
method bless(*%attrinit) {
nqp::create(self).BUILDALL(Empty, %attrinit);
}
因此,在执行该代码期间,Perl 6 试图读取一些 UTF8,并在它试图读取的某些 data 的第一行的第 45 列遇到了一个无效字符。
这就是我能说的最好的原因,没有看到你的数据。