我正在尝试将String
转换为from_uf8
以进行显示。我试图使用from_iter
和use rust_base58::{ToBase58, FromBase58};
let address = String::from("1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH");
let _hash160 = address.from_base58();
let mut s = String::from_utf8(_hash160).unwrap();
//let s = String::from_iter(_hash160);
s.remove(0);
s.pop();
s.pop();
s.pop();
s.pop();
println!("{}", s);
但没有运气。
`heroes.result.heroes[0].name`
答案 0 :(得分:2)
.from_base58()
返回
Result<Vec<u8>, FromBase58Error>
因为如果数据不是有效的Base 58,转换可能会失败。
假设您要像from_utf8
那样忽略错误,您需要.unwrap()
来获取您正在寻找的Vec<u8>
,例如
let hash160 = address.from_base58().unwrap();
let mut s = String::from_utf8(hash160).unwrap();
其余的应该按照How do I convert a Vector of bytes (u8) to a string中的说明进行编译。
当您准备好代码生产时,请确保在没有.unwrap()
的情况下处理错误。
答案 1 :(得分:0)
错误告诉您部分问题。
--> src/main.rs:7:35
|
7 | let mut s = String::from_utf8(_hash160).unwrap();
| ^^^^^^^^ expected struct `std::vec::Vec`, found enum `std::result::Result`
|
= note: expected type `std::vec::Vec<_>`
found type `std::result::Result<std::vec::Vec<_>, rust_base58::base58::FromBase58Error>`
= help: here are some functions which might fulfill your needs:
- .unwrap()
- .unwrap_or_default()
您尝试将_hash160
用作Vec<u8>
。但from_base58
会返回Result<Vec<u8>, FromBase58Error>
。你必须处理Result
。完整的程序会有错误处理,但是现在我们可以使用unwrap
,如果_hash160
是错误的话会出错。
let _hash160 = address.from_base58().unwrap();
_hash160
很好,但我们从String::from_utf8(_hash160).unwrap();
收到错误。
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: FromUtf8Error { bytes: [0, 117, 30, 118, 232, 25, 145, 150, 212, 84, 148, 28, 69, 209, 179, 163, 35, 241, 67, 59, 214, 81, 13, 22, 52], error: Utf8Error { valid_up_to: 4, error_len: Some(1) } }'
Utf8Error
告诉我们第5个字节无效。 hash160中的字节序列不是有效的UTF8字符串。
如果我们尝试String::from_utf8_lossy
...
println!("{}", String::from_utf8_lossy(&_hash160));
......我们得到了一堆废话。
4v����T�Eѳ�#�C;�Q
它也不是有效的ASCII string,232太高了。我们可以使用std::ascii::AsciiExt::is_ascii
明确检查此内容。
use std::ascii::AsciiExt;
...
# false
println!("{}", _hash160.is_ascii());
您可能只需要将其视为一个字节序列。您可以在调试模式下打印它。
println!("{:?}", _hash160);
给出了:
[0, 117, 30, 118, 232, 25, 145, 150, 212, 84, 148, 28, 69, 209, 179, 163, 35, 241, 67, 59, 214, 81, 13, 22, 52]