Estou tentando converter um vetor de bytes ASCII em uma string rust. Encontrei a std::str::from_utf8()
função, que deve ser capaz de manipular todas as strings ASCII. Por algum motivo, ela não consegue ler o símbolo de copyright, como mostrado neste exemplo de código:
let buf = vec![0xA9, 0x41, 0x52, 0x54]; //©ART
println!(
"{}",
match std::str::from_utf8(&buf) {
Ok(x) => x,
Err(x) => {
println!("ERROR: {}", x);
"failed"
}
}
);
// > ERROR: invalid utf-8 sequence of 1 bytes from index 0
De acordo com https://www.ascii-code.com/CP1252/169 0xA9
é um caractere ASCII válido e, de acordo com https://www.compart.com/en/unicode/U+00A9, também é um caractere UTF-8 válido.
Eu também tentei String::from_utf8_lossy()
, mas o resultado que obtive �ART
foi o que a string não deveria ser.
Estou esquecendo de alguma coisa aqui ou é um bug na maneira como o Rust manipula o ASCII?