【发布时间】:2018-05-06 22:35:58
【问题描述】:
现在,我正在学习 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);
【问题讨论】:
-
您确定它正在从服务器接收有效的 utf8 数据吗?还有为什么它被命名为
toString而不是更有意义的Str? -
如果您从某处复制并粘贴了该代码,则“/”或其他一些字符可能存在一些编码问题。请确保您的编辑器可以将其保存为 UTF8
-
我只有 7 到 8 分钟的时间来写我的答案——只够在表面上理解你的代码。我希望它不会那么无用它会让你烦恼或沮丧,但令我惊讶的是你实际上已经接受了它!它真的解释了你需要知道的一切和/或你解决了你的问题吗?当我写完答案时,我注意到我引用的代码是第 42 行,而不是第 43 行,并且“第 1 行第 45 行”令人困惑,因为它是关于数据而不是代码,但它并没有这么说和休息错误消息是代码的 X 行。我很想听听您对错误消息的批评。