2016-10-03 16 views

答えて

1

UnicodeScalar型を使用して数値を使用して文字列を作成できます。 Swift Stringドキュメントによれば、U + 0000〜U + D7FF、U + E000〜U + 10FFFの範囲でUnicodeスカラーが定義されています。参照:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

A UnicodeのスカラーがU + 0000 U + D7FF包括またはU + E000に含めU + 10FFFFの範囲内の任意のUnicodeコードポイントです。 Unicodeスカラーでは、 にUnicodeサロゲートペアコードポイントは含まれていません。コードポイントは、U + D800〜U + DFFFの範囲のコード です。コードポイントのほとんどが空になり、いくつかは、あなたのコンソール上に表示されない場合が

let range1From = Int("0", radix: 16) 
let range1To = Int("D7FF", radix: 16) 

print("Code points from U+0000 to U+D7FF") 

for var code in stride(from: range1From!, to: range1To!, by: 1) { 
    if let scalar = UnicodeScalar(code) { 
     var string = "\(scalar)" 
     print(string) 
    } 
} 

print("Code points from U+E000 to U+10FFFF") 

let range2From = Int("E000", radix: 16) 
let range2To = Int("10FFFF", radix: 16) 

for var code in stride(from: range2From!, to: range2To!, by: 1) { 
    if let scalar = UnicodeScalar(code) { 
     var string = "\(scalar)" 
     print(string) 
    } 
} 

注意してください。あなたは簡単に見を持っている第二のループでストライドの値によって変更することもできます。

for var code in stride(from: range2From!, to: range2To!, by: 100) { 

これは、利用できるUnicodeコードポイントの全範囲を表示し、必要に応じて、あなただけに興味がある可能性がありU + 0000からU + D7FFの範囲(または範囲内であっても)。 。ちょうどあなたが興味を持っている範囲の値でrange1Fromとrange1To定数の値を変更

+0

オプション( "\ u {02}") オプション( "\ u {03}")...希望の結果ではない – Carpsen90

+0

Iアンラップを修正して、私のコンソールは明らかに自動的にアンラップしていた。また、利用可能なUnicodeコードポイントの全範囲の表示を追加しました。 – xpereta

1

これを試してみてください:

let n = 1000 

for i in 1...n { 
    if let scalar = UnicodeScalar(i) { 
     let str = String(stringInterpolationSegment: scalar) 
     print(str) 
    } 
} 

Unicodeは、現在およそ1Mの文字を格納できる17枚の平面を、定義していますが、only about 10% of that is allocated 。また、複数のコードポイントを組み合わせて1つの文字を作成することもできます(技術的には書記素クラスタ)。これは、2つのスカラーを使用しているにもかかわらず、1文字を定義します。

let char = "a\u{33c}" 
print(char)     // a̼ 
print(char.characters.count) // 1 

ユニコードは非常に奇妙な獣です!