如何将quick_xml返回的Vec<Cow<'_, [u8]>>类型值转换为字符串
Rust quick_xml属性值转字符串方案
你当前通过collect得到的Vec<Cow<'_, [u8]>>是元素所有属性值的集合,每个元素对应一个属性的原始字节值。你打印输出的[[116, 101, 115, 116]]表示当前元素只有1个属性,该属性的字节序列刚好对应UTF-8编码的字符串test,可以按实际场景选择转换方式:
场景1:确定属性值为合法UTF-8,无需异常处理
直接调用from_utf8_lossy方法转换即可,该方法会自动将非法UTF-8字节替换为�字符,不会抛出错误:
// 原有代码得到属性集合 let attr_values: Vec<Cow<'_, [u8]>> = e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>(); // 取第一个属性转换为String let target_str = String::from_utf8_lossy(&attr_values[0]).to_string();
如果需要一次性将所有属性值都转为字符串,可以在迭代阶段直接处理:
let attr_strs: Vec<String> = e.attributes() .map(|a| String::from_utf8_lossy(&a.unwrap().value).to_string()) .collect();
场景2:需要严格校验UTF-8合法性
使用std::str::from_utf8做严格校验,通过返回的Result处理非法编码场景:
use std::str::from_utf8; let attr_values: Vec<Cow<'_, [u8]>> = e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>(); match from_utf8(&attr_values[0]) { Ok(valid_str) => { // valid_str为合法&str类型,可直接使用或转String存储 let target_str = valid_str.to_string(); } Err(err) => { // 自定义非法UTF-8处理逻辑 eprintln!("属性值编码错误:{}", err); } }
内容的提问来源于stack exchange,提问作者epo2001
相关产品推荐
相关产品推荐

