将字符串转换为base64

时间:2014-10-27 12:16:55

标签: encoding base64 rust

我需要一个简单的事情:在base64中编码一个字符串。我找到了一个例子:

extern crate serialize;

use serialize::base64::{mod, ToBase64};
use serialize::hex::FromHex;

fn main() {
    let input = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
    let result = input.from_hex().unwrap().as_slice().to_base64(base64::STANDARD);
    println!("{}", result);
}

接缝可以使用,但我不明白为什么输入只包含HEX中的字符。而且,这个Python代码会产生不同的结果:

base64.b64encode(input) # =>
'NDkyNzZkMjA2YjY5NmM2YzY5NmU2NzIwNzk2Zjc1NzIyMDYyNzI2MTY5NmUyMDZjNjk2YjY1MjA2MTIwNzA2ZjY5NzM2ZjZlNmY3NTczMjA2ZDc1NzM2ODcyNmY2ZjZk'

所以我决定做以下事情:

  //....
    let input = "some string 123";
    let result2 = input.unwrap().as_slice().to_base64(base64::STANDARD);
    let result3 = input.as_slice().to_base64(base64::STANDARD);

由于错误,它没有编译:

error: type `&str` does not implement any method in scope named `unwrap`
test1.rs:9     let result2 = input.unwrap().as_slice().to_base64(base64::STANDARD);
                                   ^~~~~~~~
test1.rs:9:34: 9:44 error: multiple applicable methods in scope [E0034]

那么如何在base64中编码一个简单的字符串?

2 个答案:

答案 0 :(得分:2)

to_base64仅针对一片字节定义,因此您必须首先在字符串上调用as_bytes

extern crate serialize;

use serialize::base64::{mod, ToBase64};

fn main() {
    let input = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
    let result = input.as_bytes().to_base64(base64::STANDARD);
    println!("{}", result);
}

输入的类型为&static str

let input = "some string 123";

&'static str没有定义解包:

let result2 = input.unwrap().as_slice().to_base64(base64::STANDARD);

您已有切片(&str),但需要&[u8]

let result3 = input.as_slice().to_base64(base64::STANDARD);

答案 1 :(得分:1)

如果您没有十六进制输入,请尝试以下操作:

let result = input.as_bytes().to_base64(base64::STANDARD);