Lavieleaf

おもったことをなんでも書くことろ

Swift Stringに半角カナの濁点を入れたときのメモ


半角カナの濁点を入れると characters だと濁点を入れた文字が一文字としてカウントされてた。

文字コードは濁点の分もある

"ミ".utf16.count             // 1
"ミ".characters.count        // 1

"ジ".utf16.count            // 1
"ジ".characters.count       // 2

Array("ミ".unicodeScalars)   // [65424]
Array("ミ".characters)       // ["ミ"]
Array("ジ".unicodeScalars)  // [65404, 65438]
Array("ジ".characters)      // ["ジ"]

// 0xff90=ミ
// なんて読むかわからないが ミ に濁点がついても 1文字でカウントされた
"\u{ff90}\u{ff9e}"                   // "ミ゙"
"\u{ff90}\u{ff9e}".characters.count  // 1

.range を使ってみると characters ではなく unicodeScalars で扱われているようだった。

"ゴゴゴゴあ".characters.count      // 5
"ゴゴゴゴあ".utf16.count           // 9
"ゴゴゴゴあ".unicodeScalars.count  // 9
"ゴゴゴゴあ".range(of: "あ")       // lowerBound 8, upperBound 9

"1234あ".characters.count          // 5
"1234あ".utf16.count               // 5
"1234あ".unicodeScalars.count      // 5
"1234あ".range(of: "あ")           // lowerBound 4, upperBound 5

半角カナの濁点を使う場合は、Range で指定する文字数には気をつけようと思う