char는 character(문자)의 약어이다.
일반적으로 char는 1바이트를 할당 받지만, Rust는 4Byte를 사용한다.
Rust에서 char 타입은 Unicode Scalar
를 표현하는 타입이다.
즉, 억양 표시가 있는 문자, 한국어, 중국어, 일본어 등의 표의문자, 이모티콘, 공백 문자 모드가 Rust에서는 Char 타입으로 사용될 수 있는 것이다.
유니코드 스칼라란 유니 코드 표준에서 사용되는 용어이다.
하나의 문자는 각 문자를 나타내는 고유한 숫자 값을 가지고 있게 된다.
🤔 문자에 대한 인간의 직관이 유니코드 정의에 매핑되지 않을 수 있음을 주의해야 한다.
유니코드 스칼라는 일반적으로 16진수 표기법으로 나타내며 U+
접두사 다음에 16진수 숫자가 오게 된다.
예를 들어,
1. 라틴 대문자 A
의 유니코드 스칼라 값은 U+0041
이고,
2. 그리스 문자 Α
(알파)의 유니코드 스칼라 값은 U+0391
이다.
let 라틴_A = char::from_u32(0x0041).unwrap(); // U+0041
let 그리스_A = char::from_u32(0x0391).unwrap(); // U+0391
println!("Latin A: {}", 라틴_A);
println!("Greek Alpha: {}", 그리스_A);
즉, String에서 index를 찾지 못하는 것과 유사하다 UTF-8을 사용하게 되면 1바이트에서 4바이트까지 동적으로 나오게 되는 것과 비슷하다!
출처: https://www.unicode.org/glossary/#unicode_scalar_value
is_alphabetic
0041..005A
까지는 Alphabetic이고 0060
은 포함되지 않는다!!fn main () {
let latin_a = char::from_u32(0x0041).unwrap();
let char_2 = char::from_u32(0x0042).unwrap();
let char_3 = char::from_u32(0x0060).unwrap();
dbg!(latin_a); // A
dbg!(latin_a.is_alphabetic()); // true
dbg!(char_2); // B
dbg!(char_2.is_alphabetic()); // true
dbg!(char_3); // ` 빽틱!
dbg!(char_3.is_alphabetic()); // false
}
is_uppercase
, is_whitespace
, is_control
...Unicode Character Database
Unicode Character Database2
Unicode Character Database3
유니코드를 기반
으로 이루어진다.직관적으로
이어지지 않는다.직관적으로
이어지지 않는다.국제화 및 다국어 어플리케이션
의 요구 사항을 충족시키기 위한 텍스트 처리에 적합한 언어이다!4바이트의 공간을 할당 받는다
.https://doc.rust-lang.org/std/primitive.char.html
https://www.unicode.org/glossary/#unicode_scalar_value
https://coding-insight.com/docs/rust/data-types/scalar/char/