【问题标题】:Perl 6 error message: Malformed UTF-8 in block <unit>Perl 6 错误消息:块 <unit> 中的 UTF-8 格式错误
【发布时间】:2018-03-16 11:48:06
【问题描述】:

我正在尝试读取下载的 html 文件

my $file = "sn.html";
my $in_fh = open $file, :r;
my $text = $in_fh.slurp;

我收到以下错误消息:

Malformed UTF-8
  in block <unit> at prog.p6 line 10

如何避免这种情况并获得文件内容的访问权限?

【问题讨论】:

  • 如果文件不包含 UTF-8 并且您不知道其编码,您可以尝试使用 read 方法将文件读取为二进制文件。另一方面,如果您知道文件的编码,例如latin1,您可以尝试使用:enc 标志将编码传递给open

标签: raku


【解决方案1】:

如果您在打开文件时未指定编码,它将假定为utf8。显然,您希望打开的文件包含无法解释为 UTF-8 的字节。因此出现错误消息。

根据您要对文件内容执行的操作,您可以设置:bin 命名参数,以二进制模式打开文件。或者您可以使用特殊的utf8-c8 编码,它会假定 UTF-8,直到遇到无法编码的字节:在这种情况下,它将生成临时代码点。

更多信息请参见https://docs.raku.org/language/unicode#UTF8-C8

【讨论】:

    【解决方案2】:

    对于slurp,如果你对编码有一些想法,也可以专门添加编码。

    来自文档 (https://docs.perl6.org/routine/slurp):

    my $text_contents   = slurp "path/to/file", enc => "latin1";
    

    我今天用它来处理一个用 ISO-8859-1 编码的愚蠢文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2023-03-28
      • 2016-11-13
      • 2019-02-09
      相关资源
      最近更新 更多