DevSight

Rust, 한글 2byte HEX En/Decoding

Rust는 기본적으로 UTF-8 중심으로 문자열을 처리한다.1 그러나 Windows는 euc-kr을 확장한 CP949 (MS949)와 Unicode로 한글을 처리하므로2 Windows에서는 영문, 숫자와 별개로 한글을 byte 단위로 처리할 때 2byte 또는 3byte의 문자가 혼재할 수 있다.

아래의 예제는 2byte (AnsiString) 한글만으로 Hex를 encode, decode 필요가 있을 때 참고할 만한 소스이다.

1
2
3
[dependencies]
encoding = "0.2.33"
hex = "0.4.2"
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use encoding::{label::encoding_from_whatwg_label, EncoderTrap, DecoderTrap};
use hex;

fn main() {
    let kor_eng_num = String::from("가나다 ABC 123");
    println!("{}", kor_eng_num);
    println!("---------------------");

    let mut vec = Vec::new();
    let string_list = kor_eng_num.split_whitespace();
    for s in string_list {
        println!("UTF8: {} / MS949: {}", hex::encode(s).to_uppercase(), split_hex(s.into()));
        vec.push(split_hex(s.into())); // s.into() -> &s
    }
    println!("---------------------");

    for hex_str in vec.iter() {
        println!("{} : {}", hex_str, hex2str(hex_str));
    }
}
Read More ···