요새 뜬금없이 프론트를 하고 있습니다. 그래서 Rust 한글 깨짐 문제 해결 태스크가 주어졌습니다.

여담이지만 프론트 담당은 처음 해봤는데, 디자인적인 디테일을 구현하는 게 너무 재밌어요. PPT 외주받을 땐 이런 작업이 너무 귀찮았는데 지금은 아주 재밌네요? PPT 외주는 맨땅에 헤딩하면서 농협중앙회 주관 농업교육 자료부터 모은행 VIP 대상 부동산 컨설팅 자료까지 만들었던!! 참 흥미롭고 값진 경험이었지만 돈 안되는 프로그래밍이 더 좋아잉. 역시 마우스 안 써도 되는 컴퓨터 활동이면 사족을 못 쓰는 여자답지요.

머 암튼 Rust를 사용해 GUI 애플리케이션을 개발하다 보면, 한글이 제대로 표시되지 않고 네모(□)로 나오는 문제가 발생합니다. 이건 Rust에서 제공하는 기본 폰트가 한글을 지원하지 않기 때문입니다. (출처: 여러 네티즌의 뇌피셜)

Rust
ui.label("안녕하세요! 한글 테스트입니다.");

이런 코드를 입력하면 결과는

Plaintext
□□□□□□□! □□□□□□.

이런 식입니다. 심지어 키보드 인풋도 자음 모음 가릴 것 없이 전부 네모로 나옵니다. 이런 Rust 한글 깨짐 문제를 해결하는 방법은 다음과 같습니다.

Step 1: 한글 폰트 파일 준비

먼저, 한글을 지원하는 폰트를 다운로드하여 프로젝트에 추가해야 합니다. 여기서는 Noto Sans CJK KR을 사용했습니다.

1. 다운로드한 NotoSansKR-Regular.ttf 파일을 프로젝트 내 assets/fonts/ 폴더에 저장합니다.

Step 2: 사용자 정의 폰트 설정 함수 작성

main.rs 파일에 폰트를 설정하는 함수를 작성합니다. egui::FontDefinitions를 사용해 폰트를 등록하고, 애플리케이션 전체에서 사용할 수 있도록 적용합니다.

Rust
use egui::{FontDefinitions, FontFamily, Context};

fn configure_fonts(ctx: &Context) {
    let mut fonts = FontDefinitions::default();

    // 한글 폰트 파일 추가
    fonts.font_data.insert(
        "NotoSansKR".to_owned(),
        egui::FontData::from_static(include_bytes!("../assets/fonts/NotoSansKR-Regular.ttf")),
    );

    // 기본(Proportional) 및 고정(Monospace) 폰트 패밀리에 추가
    fonts.families.get_mut(&FontFamily::Proportional).unwrap().insert(0, "NotoSansKR".to_owned());
    fonts.families.get_mut(&FontFamily::Monospace).unwrap().insert(0, "NotoSansKR".to_owned());

    // 변경된 폰트를 egui 컨텍스트에 적용
    ctx.set_fonts(fonts);
}

Step 3: 초기화 시 폰트 설정 호출

애플리케이션을 초기화하는 부분에서 configure_fonts 함수를 호출하여 폰트를 적용합니다.

저는 main.rs 파일에서 App::new 함수에 아래에서 호출했습니다.

Rust
impl App {
    pub fn new(ctx: &Context) -> Self {
        // 한글 폰트 설정
        configure_fonts(ctx);

        // 기존 초기화 코드
      }
  }

레딧이랑 스택오버플로우, GPT 답변을 참고해서 제일 쉬워보이는 걸로 해봤는데 바로 구현이 돼서 다른 방법은 시도를 안 해봤습니다. 내일 모레 토익 시험이라서요.

4. WebAssembly(WASM) 환경에서 폰트 추가

만약 애플리케이션을 WebAssembly(WASM)로 빌드하여 브라우저에서 실행한다면, 폰트 파일도 정적 리소스로 포함되어야 합니다.

1. assets/fonts/ 폴더를 WASM 빌드 환경에 포함되도록 설정합니다.

2. 브라우저에서 폰트를 로드할 수 있는 경로를 확인하세요.

이렇게 하면 Rust 한글 깨짐 문제가 해결될 거예요.

한글 지원이 필요한 Rust 개발자에게 도움이 되길 바랍니다! 😊

끝!

안녕! 에러 없는 하루 되세요.