μ λμ½λ , μμ€ν€μ½λ ( Unicode , ASCII )
μλ νμΈμ! μ€λμ λ¬Έμμ΄κ³Ό λ¬Έμ κΈμμ μμ±μ λ―Έλ€λμλ μ λμ½λμ κ΄λ ¨νμ¬ μ 리λ₯Ό ν΄λ³΄λ €κ³ ν©λλ€.
μΆκ°μ μΌλ‘ μμ€ν€μ½λκΉμ§λ μ΄μ¬ν μ 리ν΄λ³΄κ² μ΅λλ€!! π€
μ λμ½λμ μμ€ν€μ½λλ₯Ό μ 리νκΈ° μμ 2μ§λ²μ λν΄μ μμλ³΄κ² μ΅λλ€.
2μ§λ²μ μ€μ§ 0κ³Ό 1λ‘λ§ λ°μ΄ν°λ₯Ό ννν©λλ€.
μ»΄ν¨ν°λ μ 보λ₯Ό νννκΈ° μν κΈ°λ³Έ μ리λ‘λ μ κΈ° μ νΈμ λλ€. μ»΄ν¨ν°μλ κ΅μ₯ν λ§μ μ€μμΉ ( νΈλμ§μ€ν° )κ° μμ΅λλ€.
νΈλμ§μ€ν°λ₯Ό μ¬μ©νμ¬ μ κΈ° μ νΈκ° μμΌλ©΄ '1' μμΌλ©΄ '0' λ κ°μ§ κ²½μ°λ‘ ννν©λλ€.
μ»΄ν¨ν°λ 2μ§λ²μμ νλμ μλ¦Ώμλ₯Ό νννλ λ¨μλ₯Ό λΉνΈ ( bit )λΌκ³ ν©λλ€.
λΉνΈ ν κ°λ‘λ λ§μ μμ λ°μ΄ν°λ₯Ό λνλ΄κΈ°μ λΆμ‘±νμ¬ μ¬λ¬ μ«μ μ‘°ν©μ μ»΄ν¨ν°μ λνλ΄κΈ° μν΄ λΉνΈμ΄μ μ¬μ©ν©λλ€.
λ°μ΄νΈ( byte )λΌκ³ λΆλ¦½λλ€. λ°μ΄νΈλ 8κ°μ λΉνΈκ° λͺ¨μ¬ λ§λ€μ΄μ§ κ²μ λλ€.
λΉνΈλ νλμ 0κ³Ό 1λ‘ ννν μ μκΈ° λλ¬Έμ 2βΈ = 256κ°μ μλ‘ λ€λ₯Έ λ°μ΄νΈκ° μ‘΄μ¬ν μ μμ΅λλ€.
λ¬Έμλ₯Ό μ«μλ‘ ννν μ μλλ‘ μ ν΄μ§ μ½μ(νμ€)μ΄ μμ΅λλ€!!!
κ·Έμ€ νλλ λ―Έκ΅ μ 보κ΅ν νμ€ λΆνΈμΈ ASCII ( μμ€ν€μ½λ / American Standard Code for Information Interchange )
μμ€ν€μ½λ ( ASCII )
Aλ₯Ό 2μ§λ²μΌλ‘ νννλ©΄ 10μ§λ² κΈ°μ€μΌλ‘ 65μ΄λ―λ‘ πβΆ × 1 + πβ΅ × 0 + πβ΄ × 0 + π³ × 0 +π² × 0 + π¹ × 0 + πβ° × 1 = ( 64 + 1 )λ‘ ννν μ μμ΅λλ€. Aλ₯Ό 2μ§λ²μΌλ‘ νννλ©΄ 1000001μ λλ€.
νμ§λ§ μμ€ν€μ½λλ 8λΉνΈμ λ°μ΄ν°λ₯Ό μ¬μ©νλ€κ³ νλλ° κ³μ°ν κ°κ³Ό μ¬μ§μ μλ 7μ리μ λλ€. π€
λλ¨Έμ§ ν μ리λ ν¨λ¦¬ν° λΉνΈ ( parity bit )λΌκ³ λΆλ¦½λλ€. λ°μ΄ν°μ μλ¬λ₯Ό νμ§νκΈ° μν΄ μ¬μ©λ©λλ€.
ν¨λ¦¬ν° λΉνΈ ( parity bit ) : μ 보μ λ¬ κ³Όμ μμ μ€λ₯ λ°μ μ¬λΆλ₯Ό κ²μ¬νκΈ° μν΄ μΆκ°λ λΉνΈμ΄λ©° μ μ‘νκ³ μ νλ λ°μ΄ν°μ λμ 1λΉνΈλ₯Ό μΆκ°νμ¬ μ μ‘ν©λλ€.
ν¨λ¦¬νΈ λΉνΈλ νμ , μ§μ λΉνΈλ‘ λΆλ₯ν©λλ€.
μ μ‘νκ³ μ νλ Dataμ 1μ κ°μκ° μ§μλ©΄ 0 1μ κ°μκ° νμλ©΄ 1λ‘ λ³΄λ λλ€.
μ΄λ¬ν ν¨λ¦¬ν° λΉνΈλ‘λ μ€λ₯ κ²μΆλ§ κ°λ₯ν λΏ μ€λ₯λ₯Ό μμ ν μ μλ€λ λ¨μ μ΄ μμ΅λλ€.
μλͺ»λ κ³³μ μ°ΎκΈ° μν΄μλ ν΄λ° μ½λλ₯Ό νμ©ν΄μΌ λ©λλ€.
ν΄λ° μ½λ κ΄λ ¨ν΄μλ μ²μ²ν CSμ§μ μ 리 μΉ΄ν κ³ λ¦¬μ κΈμ μμ±ν΄λ³΄λλ‘ νκ² μ΅λλ€!!!π
μμ€ν€μ½λμ λ¬Έμ μ
μμ€ν€μ½λ νμλ μμ΄λ§ μ‘΄μ¬ν©λλ€. μμ€ν€μ½λνκ° λ§λ€μ΄μ§ μκΈ°μλ μμ΄κΆ μ¬λλ€λ§ μ£Όλ‘ μ»΄ν¨ν°λ₯Ό μ¬μ©νμ¬ μκ°μ΄ μ§λλ©΄μ λ€μν μ¬λ¬ λλΌμμ μ»΄ν¨ν°λ₯Ό μ¬μ©νκ² λμ΄ λ§μ ννμ ν μ μλλ‘ λ€μν νμ€λ€μ΄ μκΈ°κ² λμμ΅λλ€.
βΆοΈ μ΄ λ§μ νμ€λ€μ νλλ‘ ν©μΉ μλ‘μ΄ κΈ°μ€μ΄ νμν΄μ Έ μ λμ½λκ° λ±μ₯νκ² λμμ΅λλ€.
μ λμ½λ ( Unicode )
μ μΈκ³μ μΈμ΄μ λ¬Έμλ₯Ό μ μνκΈ° μν κ΅μ νμ€ μ½λκ° λ±μ₯νμμ΅λλ€. 1λ°μ΄νΈλ‘ λΆμ‘±νμ¬ νμ₯ν 2λ°μ΄νΈ π¹βΆ = 65,536λ₯Ό μ¬μ©νκ² λ©λλ€. μ λμ½λμμλ λ¬Έμ μ μ΄ λ°μν©λλ€. μμ΄λ‘ ννν λ 1λ°μ΄νΈ νκΈ νν μ 2λ°μ΄νΈ λ€λ₯Έ νΉμλ¬Έμ νν μ 3λ°μ΄νΈ λ± λ¬Έμλ§λ€ κ°λ³μ μΈ ννμ λ¬Έμ κ° μκΉλλ€. λ¬Έμλ§λ€ ννμ λ¬Έμ λ‘ μΈν΄ μ»΄ν¨ν°κ° νΌλμ μ£Όμ΄ μ΄λ€ λ¬Έμλ‘ μ½μμ§ μ ν΄μ€μΌ ν©λλ€.
μ λμ½λ μΈμ½λ© λ°©μ λ±λ± μλ‘ μ 보λ€μ λ°λ‘ κΈλ‘ μ 리ν μμ μ λλ€!!
λ¬Έμμ΄κ³Ό λ¬Έμμμ μ¬μ©λλ μ λμ½λμ λν΄ μ 리λ₯Ό 본격μ μΌλ‘ μμν΄λ³Όκ²μγ γ
λ¬Έμμ΄ λ¦¬ν°λ΄μ νΉμλ¬Έμ
λ¬Έμμ΄ λ¦¬ν°λ΄μ νΉμ λ¬Έμλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowlege" - Einstein
let dollaSign = "\u{24}" // $, μ λμ½νΈ U+0024
let blackHeart = "\u{2665}" // ♥, μ λμ½λ U+2665
let sparklingHeart = "\u{1F496}" // π,μ λμ½λ U+1F496
\u { n } : nμ 1-8μ리 16μ§μ ννλ‘ κ΅¬μ±λ μ λμ½λμ λλ€.
μ λμ½λ μ€μΉΌλΌ
Swiftμ λ€μ΄ν°λΈ λ¬Έμμ΄ νμ μ μ λμ½λ μ€μΉΌλΌ κ°μΌλ‘ λ§λ€μ΄μ‘μ΅λλ€. ν¬κΈ°κ° κ°λ³μ μΈ String λ¬Έμμ΄μ νλμ© κ°λ³μ μΌλ‘ μ κ·ΌνκΈ° μν λ°©λ²μ λλ€. μ λμ½λλ 21λΉνΈμ μ«μλ‘ κ΅¬μ±λμ΄μμΌλ©° νλ μ΄μμ μ λμ½λ μ€μΉΌλΌκ° λͺ¨μ¬ Characterλ₯Ό λ§λλλ€.
ex) U+0061λ λΌν΄μ΄μ μλ¬Έμ aλ₯Ό λνλ΄κ³ U+1F425λ μ λ©΄μ λ³μ리λ₯Ό
μ λμ½λλ₯Ό κ²°ν©ν΄μ μ¬μ©ν μ μμ΅λλ€.
let precomposed: Character = "\u{D55C}" // ν
let decomposed: Character = "\u{1112}\u{u1161}\u{11AB}" // γ
, γ
,γ΄
// precomposed : ν, decomposed ν
μ λμ½λ λ¬Έμμ΄κ³Ό λ¬Έμ λΉκ΅
μ λμ½λλ κ²°ν©λ λ¬Έμμ΄μ κ°κ³ λΉκ΅νκ² λ©λλ€.
// "Voulez-vous un café?" using LATIN SMALL LETTER E WITH ACUTE
let eAcuteQuestion = "Voulez-vous un caf\u{E9}?"
// "Voulez-vous un café?" using LATIN SMALL LETTER E and COMBINING ACUTE ACCENT
let combinedEAcuteQuestion = "Voulez-vous un caf\u{65}\u{301}?"
if eAcuteQuestion == combinedEAcuteQuestion {
print("These two strings are considered equal")
}
// These two strings are considered equal μΆλ ₯
κ°μ μ λμ½λ λ¬Έμμ¬λ μ λμ½λκ° λ€λ₯΄λ©΄ λ€λ₯Έ λ¬Έμλ‘ νλ³ν©λλ€.
let latinCapitalLetterA: Character = "\u{41}"
let cyrillicCapitalLetterA: Character = "\u{0410}"
if latinCapitalLetterA != cyrillicCapitalLetterA {
print("These two characters are not equivalent.")
}
// Prints "These two characters are not equivalent."
β» Swiftμμ λ¬Έμμ΄κ³Ό λ¬Έμμ λΉκ΅λ μΈμ΄λ₯Ό κ³ λ €νμ§ μμ΅λλ€. μΈμ΄μ μκ΄μμ΄ κ°μ λ¬Έμλ©΄ κ°μ λ¬Έμλ‘ μ·¨κΈν©λλ€.
λ¬Έμμ΄μ μ λμ½λ νν
μ λμ½λ λ¬Έμκ° ν μ€νΈ νμΌμ΄λ λ€λ₯Έ μ μ₯μμ μ°μΌ λ μ λμ½λ μ€μΉΌλΌλ UTF-8 , UTF-16, UTF-32λ± λ€μν μ λμ½λ μΈμ½λ© λ°©μμ΄ μ¬μ©λ©λλ€.
let dogString = "Dog!!πΆ"
UTF - 8 νν
for codeUnit in dogString.utf8 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 226 128 188 240 159 144 182
UTF - 16 νν
for codeUnit in dogString.utf16 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 8252 55357 56374
μ λμ½λ μ€μΉΌλΌ νν
for scalar in dogString.unicodeScalars {
print("\(scalar.value) ", terminator: "")
}
print("")
// 68 111 103 8252 128054
for scalar in dogString.unicodeScalars {
print("\(scalar) ")
}
// D
// o
// g
// !!
// πΆ
μ λμ½λμ μμ€ν€μ½λμ κ΄λ ¨νμ¬ μ 리νλ©΄μ λͺ°λλ λΆλΆμ λν΄μ μ 리ν μκ°μ΄ λμμ΅λλ€.
λΏλ§ μλλΌ λ€λ₯Έ CSμ§μλ€μ λ€λ₯Έ μΉ΄ν κ³ λ¦¬λ‘ λ¬Άμ΄ νλμ© μ 리ν΄λ³Ό μκ°μ λλ€.
↓ μ 리νλ©΄μ λͺ¨λ₯΄λ μ 보λ€μ μ°Ύμλ΄€λ λΈλ‘κ·Έλ€μ λλ€!!
https://velog.io/@kim-jaemin420/ASCII-Unicode-%EC%95%84%EC%8A%A4%ED%82%A4%EC%BD%94%EB%93%9C%EC%99%80-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ansdbtls4067&logNo=220886661657
https://devuna.tistory.com/31
https://velog.io/@haze5959/Swift-Unicode-Scalar-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%AC%B8%EC%9E%90%EC%97%B4-count-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EA%B4%80%EA%B3%84