2014年09月17日
Posted by 屋台ブルー at
2014年09月17日00:00 Comment(0)
Swiftで遊ぼう! - 68 プログラマの考え方 8 テキストデコーディング3
参考文献:プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!←勉強になるよ初めての人にいいかも。
この本のことをこのブログでは「プロおも本(ぷろおもぼん)」とします(^^)/
さて、次の課題を考えてみた。数字を27で割って余りが1なら大文字Aという、このやり方は、「プロおも本」にも書かれているけど、OSに依存する何かしらのコードに従ったアルファベット表記法だろう。じゃあSwiftで考えてみる。何かしらアルファベットをコードする決まり事があると思われ調べてみた。
私の調べた限りアルファベットのコードは3つのアクセス法があることが分かった。
UTF-8
UTF-16
Unicodeスカラー
それぞれが何を意味しているのかイマイチ分からないけど、日本語のように文字数が多い場合はUnicodeを扱うのが一般的でしょう。私が勉強している「プロおも本」は英語の本なので、アルファベット以外の言語に対して余りにも無関心だ。「27」で割って余りを考えるシステムって、ちょっとあり得ないでしょう。ちなみに私が使っている「プロおも本」で出てくる数列「18,12312,171,763,98423,1208,216,11,500,18,241,0,32,20620,27,10」を文字コードにデコードすると「Right? Yes!」というメッセージに変換される。
しかし、Swiftで仕様される3つのコードで変換すると、
UTF-8の場合、
for scalar in originalMessage.utf8 {
println("\(scalar) ")
}
//82
//105
//103
//104
//116
//63
//32
//89
//101
//115
//33
じゃあUTF-16では
for scalar in originalMessage.utf16 {
println("\(scalar) ")
}
//82
//105
//103
//104
//116
//63
//32
//89
//101
//115
//33
そして、Unicodeスカラーにすると、
for scalar in originalMessage.unicodeScalars {
println("\(scalar) ")
}
//R
//i
//g
//h
//t
//?
//
//Y
//e
//s
//!
結局のところMacで使用することのないコードのようなので、この問題はパスした方がいいかなと考えるしだいです
さて、物知りの皆さん、知っていることがあったら教えてください。
この本のことをこのブログでは「プロおも本(ぷろおもぼん)」とします(^^)/
さて、次の課題を考えてみた。数字を27で割って余りが1なら大文字Aという、このやり方は、「プロおも本」にも書かれているけど、OSに依存する何かしらのコードに従ったアルファベット表記法だろう。じゃあSwiftで考えてみる。何かしらアルファベットをコードする決まり事があると思われ調べてみた。
私の調べた限りアルファベットのコードは3つのアクセス法があることが分かった。
UTF-8
UTF-16
Unicodeスカラー
それぞれが何を意味しているのかイマイチ分からないけど、日本語のように文字数が多い場合はUnicodeを扱うのが一般的でしょう。私が勉強している「プロおも本」は英語の本なので、アルファベット以外の言語に対して余りにも無関心だ。「27」で割って余りを考えるシステムって、ちょっとあり得ないでしょう。ちなみに私が使っている「プロおも本」で出てくる数列「18,12312,171,763,98423,1208,216,11,500,18,241,0,32,20620,27,10」を文字コードにデコードすると「Right? Yes!」というメッセージに変換される。
しかし、Swiftで仕様される3つのコードで変換すると、
UTF-8の場合、
for scalar in originalMessage.utf8 {
println("\(scalar) ")
}
//82
//105
//103
//104
//116
//63
//32
//89
//101
//115
//33
じゃあUTF-16では
for scalar in originalMessage.utf16 {
println("\(scalar) ")
}
//82
//105
//103
//104
//116
//63
//32
//89
//101
//115
//33
そして、Unicodeスカラーにすると、
for scalar in originalMessage.unicodeScalars {
println("\(scalar) ")
}
//R
//i
//g
//h
//t
//?
//
//Y
//e
//s
//!
結局のところMacで使用することのないコードのようなので、この問題はパスした方がいいかなと考えるしだいです
さて、物知りの皆さん、知っていることがあったら教えてください。