use encoding_rs::{BIG5, GBK, UTF_8};
use rand::Rng;
pub fn decode_auto(bytes: &[u8]) -> String {
let decoders = vec![UTF_8, GBK, BIG5]; for encoding in decoders {
let (decoded, _, _) = encoding.decode(bytes);
if !decoded.contains("�") {
return decoded.into_owned();
}
}
String::new() }
pub fn _utc_ms_option() -> Option<i64> {
Some(chrono::Utc::now().timestamp_millis())
}
pub fn nanoid2(length: Option<usize>) -> String {
fn get_random_lowercase_letter() -> char {
let mut rng = rand::rng(); let ascii_value = rng.random_range(97..=122); ascii_value as u8 as char
}
let first_letter = get_random_lowercase_letter();
let len = length.unwrap_or(21) - 1;
let id = nanoid::nanoid!(len);
format!("{}{}", first_letter, id) }