utf-8 - 锈打印!在某些情况下打印奇怪的字符
问题描述
我正在尝试编写一个简短的程序(足够短以至于它具有简单的主要功能)。首先,我应该在 cargo.toml 文件中列出依赖:
[dependencies]
passwords = {version = "3.1.3", features = ["crypto"]}
然后当我在 main.rs 中使用 crate 时:
extern crate passwords;
use passwords::hasher;
fn main() {
let args: Vec<String> = std::env::args().collect();
if args.len() < 2
{
println!("Error! Needed second argument to demonstrate BCrypt Hash!");
return;
}
let password = args.get(1).expect("Expected second argument to exist!").trim();
let hash_res = hasher::bcrypt(10, "This_is_salt", password);
match hash_res
{
Err(_) => {println!("Failed to generate a hash!");},
Ok(hash) => {
let str_hash = String::from_utf8_lossy(&hash);
println!("Hash generated from password {} is {}", password, str_hash);
}
}
}
当我运行以下命令时出现问题:
$ target/debug/extern_crate.exe trooper1
这成为输出:
?sC�M����k��ed from password trooper1 is ���Ka .+:�
但是,此输入:
$ target/debug/extern_crate.exe trooper3
产生这个:
Hash generated from password trooper3 is ��;��l�ʙ�Y1�>R��G�Ѡd
我对第二个输出很满意,但是 UTF-8 中是否存在可能导致输出语句的“哈希生成”部分被覆盖的内容?有没有我可以用来防止这种情况的代码?
注意:代码是在 Windows 10 的 Visual Studio Code 中开发的,并使用嵌入式 Git Bash 终端编译和运行。
PS:看了类似Rust println之类的问题!问题 - println 宏内部的奇怪行为以及从标准输入读取用户输入时为什么我的字符串不匹配?但这些问题似乎是新线的问题,我认为这不是问题所在。
解决方案
您可以在打印之前将哈希转换为十六进制以防止这种情况发生
推荐阅读
- angular - Angular 5如何获取复选框值
- jquery - 如何防止引导验证在表单提交之前显示错误消息?
- c# - SettingsBase 的序列化规则是什么
- oracle - 如何将 NCLOB 从 BFILE 加载到 Oracle DB
- excel - 在 Excel 文件中从 2 个不同的 csv 文件中写入一列,其中另一列作为键
- vba - 仅允许数字作为用户输入值到 Application.InputBox for CommandButton1_Click()
- r - 如何在 r 中的 strftime 中添加假期
- hazelcast - Hazelcast 在相邻网络之间是否有网关
- android - Jitpack Gitlab Private Repository Trial 没有对 repo 的读取权限
- flutter - 颤振媒体记录器振幅