- Tue 11 July 2017
- development
- mani3
- #swift
半角カナの濁点を入れると 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
で指定する文字数には気をつけようと思う