br-crypto 0.4.8

This is an crypto
Documentation
use std::borrow::Cow;
use encoding::all::{GB18030, GBK, UTF_8, KOI8_R};
use encoding::{DecoderTrap, EncoderTrap, Encoding};
use encoding_rs::{BIG5, EUC_KR};
use textcode::gb2312;


pub fn code_to_utf8(mut code: &str, data: Vec<u8>) -> String {
    if data.is_empty() {
        return "".to_string();
    }
    if code.is_empty() {
        code = "utf8";
    }
    match code.to_lowercase().as_str() {
        "utf8" | "utf-8" => {
            match from_utf8(data.clone()) {
                Ok(e) => e,
                Err(_) => {
                    code_to_utf8("gbk", data.clone())
                }
            }
        }
        "gbk" => {
            match gbk_to_utf8(data.clone()) {
                Ok(e) => e,
                Err(_) => {
                    code_to_utf8("gb18030", data.clone())
                }
            }
        }
        "gb18030" => match gb18030_to_utf8(data.clone()) {
            Ok(e) => e,
            Err(_) => {
                code_to_utf8("gb2312", data.clone())
            }
        },
        "gb2312" => gb2312_to_utf8(data.clone()),
        "big5" => big5_to_utf8(data.clone()),
        "iso-8859-1" => iso_8859_1_to_utf8(data.clone()),
        "iso-8859-2" => iso_8859_2_to_utf8(data.clone()),
        "iso-8859-3" => iso_8859_3_to_utf8(data.clone()),
        "iso-8859-4" => iso_8859_4_to_utf8(data.clone()),
        "iso-8859-5" => iso_8859_5_to_utf8(data.clone()),
        "iso-8859-6" => iso_8859_6_to_utf8(data.clone()),
        "iso-8859-7" => iso_8859_7_to_utf8(data.clone()),
        "iso-8859-8" => iso_8859_8_to_utf8(data.clone()),
        "iso-8859-9" => iso_8859_9_to_utf8(data.clone()),
        "iso-8859-10" => iso_8859_10_to_utf8(data.clone()),
        "iso-8859-11" => iso_8859_11_to_utf8(data.clone()),
        "iso-8859-13" => iso_8859_13_to_utf8(data.clone()),
        "iso-8859-14" => iso_8859_14_to_utf8(data.clone()),
        "iso-8859-15" => iso_8859_15_to_utf8(data.clone()),
        "iso-8859-16" => iso_8859_16_to_utf8(data.clone()),
        "iso-6937" => iso_6937_to_utf8(data.clone()),
        "koi8-r" => koi8r_to_utf8(data.clone()),
        "euc-kr" => euc_kr_to_utf8(data.clone()),
        _ => from_utf8(data.clone()).unwrap_or("".to_string()),
    }
}


pub fn gbk_to_utf8(data: Vec<u8>) -> Result<String, Cow<'static, str>> {
    GBK.decode(&data, DecoderTrap::Strict)
}

pub fn to_gbk(str: &str) -> Vec<u8> {
    GBK.encode(str, EncoderTrap::Strict).unwrap()
}

pub fn from_utf8(data: Vec<u8>) -> Result<String, Cow<'static, str>> {
    UTF_8.decode(&data, DecoderTrap::Strict)
}

pub fn to_utf8(str: &str) -> Vec<u8> {
    UTF_8.encode(str, EncoderTrap::Strict).unwrap()
}

pub fn gb18030_to_utf8(data: Vec<u8>) -> Result<String, Cow<'static, str>> {
    GB18030.decode(&data, DecoderTrap::Strict)
}

pub fn to_gb18030(str: &str) -> Vec<u8> {
    GB18030.encode(str, EncoderTrap::Strict).unwrap()
}

pub fn gb2312_to_utf8(data: Vec<u8>) -> String {
    gb2312::decode_to_string(&data)
}

pub fn to_gb2312(str: &str) -> Vec<u8> {
    gb2312::encode_to_vec(str)
}

// ↓多种iso-8859编码格式解码↓
pub fn iso_8859_1_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_1::decode_to_string(&data)
}

pub fn iso_8859_2_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_2::decode_to_string(&data)
}

pub fn iso_8859_3_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_3::decode_to_string(&data)
}

pub fn iso_8859_4_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_4::decode_to_string(&data)
}

pub fn iso_8859_5_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_5::decode_to_string(&data)
}

pub fn iso_8859_6_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_6::decode_to_string(&data)
}

pub fn iso_8859_7_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_7::decode_to_string(&data)
}

pub fn iso_8859_8_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_8::decode_to_string(&data)
}

pub fn iso_8859_9_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_9::decode_to_string(&data)
}

pub fn iso_8859_10_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_10::decode_to_string(&data)
}

pub fn iso_8859_11_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_11::decode_to_string(&data)
}

pub fn iso_8859_13_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_13::decode_to_string(&data)
}

pub fn iso_8859_14_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_14::decode_to_string(&data)
}

pub fn iso_8859_15_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_15::decode_to_string(&data)
}

pub fn iso_8859_16_to_utf8(data: Vec<u8>) -> String {
    textcode::iso8859_16::decode_to_string(&data)
}

pub fn iso_6937_to_utf8(data: Vec<u8>) -> String {
    textcode::iso6937::decode_to_string(&data)
}

pub fn big5_to_utf8(data: Vec<u8>) -> String {
    let (cow, _, _) = BIG5.decode(&data);
    cow.into_owned()
}

pub fn koi8r_to_utf8(data: Vec<u8>) -> String {
    KOI8_R.decode(&data, DecoderTrap::Strict).unwrap()
}
pub fn euc_kr_to_utf8(data: Vec<u8>) -> String {
    let (decoded_str, _, _) = EUC_KR.decode(data.as_slice());
    match decoded_str {
        Cow::Borrowed(s) => s.to_string(),
        Cow::Owned(s) => s,
    }
}
use urlencoding::{decode, encode};

/// url解码
pub fn urlencoding_decode(str: &str) -> String {
    decode(str).unwrap_or(Cow::from(str)).to_string()
}

/// url编码
pub fn urlencoding_encode(str: &str) -> String {
    encode(str).to_string()
}