【问题标题】:'expected slice, found u8' error when parsing bytes with Kuchiki使用 Kuchiki 解析字节时出现“预期切片,发现 u8”错误
【发布时间】:2019-07-12 20:43:53
【问题描述】:

我在尝试执行以下操作时遇到类型错误:

use kuchiki::parse_html;
use kuchiki::traits::*;

fn main() {
    let data = r#"<!DOCTYPE html>
                  <html>
                      <body>
                          test
                      </body>
                  </html>"#;
    let dom = parse_html()
        .from_utf8()
        .from_iter(data.as_bytes());
}

错误是:

error[E0271]: type mismatch resolving `<tendril::fmt::Bytes as tendril::fmt::SliceFormat>::Slice == u8`
  --> src/main.rs:13:10
   |
13 |         .from_iter(data.as_bytes());
   |          ^^^^^^^^^ expected slice, found u8
   |
   = note: expected type `[u8]`
              found type `u8`
   = note: required because of the requirements on the impl of `std::convert::Into<tendril::tendril::Tendril<tendril::fmt::Bytes>>` for `&u8`

data.as_bytes() 返回对字节切片 (&amp;[u8]) 的引用,所以我对 found u8 的来源感到困惑。如何纠正这个错误?

相关方法的文档are here

【问题讨论】:

    标签: rust kuchiki


    【解决方案1】:

    使用read_from() 而不是from_iter(),如下所示:

    use kuchiki::parse_html;
    use kuchiki::traits::*;
    
    fn main() {
        let data = r#"<!DOCTYPE html>
                      <html>
                          <body>
                              test
                          </body>
                      </html>"#;
        let dom = parse_html()
            .from_utf8()
            .read_from(&mut data.as_bytes());
    }
    

    您收到编译错误,因为 from_iter() 需要一个项目类型为 Tendril 的迭代器。 Tendril 是一种字符串,所以data 的类型需要类似于Vec&lt;&amp;[u8]&gt;,但你有&amp;[u8]

    您也可以使用from_iter() 使其工作,但它有点不太清晰/高效:

    use kuchiki::parse_html;
    use kuchiki::traits::*;
    
    fn main() {
        let data = r#"<!DOCTYPE html>
                      <html>
                          <body>
                              test
                          </body>
                      </html>"#;
        let dom = parse_html()
            .from_utf8()
            .from_iter(vec![data.as_bytes()]);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2010-09-10
      • 2018-12-31
      • 2022-12-05
      相关资源
      最近更新 更多