use encoding_rs::Encoding;
#[inline]
pub(crate) fn encoding_for_windows_codepage(codepage: u32) -> &'static Encoding {
let codepage = match codepage {
10001 => 932,
10002 => 950,
10003 => 949,
10008 => 936,
10007 => 10017,
10004 => 1256,
10005 => 1255,
10006 => 1253,
10021 => 874,
10029 => 1250,
10081 => 1254,
other => other,
};
u16::try_from(codepage)
.ok()
.and_then(codepage::to_encoding_no_replacement)
.unwrap_or(encoding_rs::WINDOWS_1252)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_codepage_mapping() {
assert_eq!(encoding_for_windows_codepage(1251).name(), "windows-1251");
assert_eq!(encoding_for_windows_codepage(932).name(), "Shift_JIS");
assert_eq!(encoding_for_windows_codepage(874).name(), "windows-874");
assert_eq!(encoding_for_windows_codepage(866).name(), "IBM866");
assert_eq!(encoding_for_windows_codepage(20866).name(), "KOI8-R");
assert_eq!(encoding_for_windows_codepage(10001).name(), "Shift_JIS");
assert_eq!(encoding_for_windows_codepage(10002).name(), "Big5");
assert_eq!(encoding_for_windows_codepage(1717).name(), "windows-1252");
assert_eq!(encoding_for_windows_codepage(100_000).name(), "windows-1252");
assert_eq!(encoding_for_windows_codepage(50225).name(), "windows-1252");
assert_eq!(encoding_for_windows_codepage(10007).name(), "x-mac-cyrillic");
assert_eq!(encoding_for_windows_codepage(10004).name(), "windows-1256");
assert_eq!(encoding_for_windows_codepage(10005).name(), "windows-1255");
assert_eq!(encoding_for_windows_codepage(10006).name(), "windows-1253");
assert_eq!(encoding_for_windows_codepage(10021).name(), "windows-874");
assert_eq!(encoding_for_windows_codepage(10029).name(), "windows-1250");
assert_eq!(encoding_for_windows_codepage(10081).name(), "windows-1254");
}
}