UTF-8で日本語の折りたたみ

昨日作った折りたたみ処理は間違っていた。間違っていたというか、バイト数で数えたときの折りたたみ位置は正しいんだけど、それは(普通の人が)期待するものにはならないことに気がついた。

折りたたむ長さが 60 文字だとすると、半角だと 60 文字、全角だと 30 文字で折りたたまれるのがおそらく期待される動作だと思う。UTF-8 だといわゆる全角は 3 バイトだから、バイト数で折りたたみ位置を決めると全角 20 文字で折りたたまれることに。

つまり表示されるときの幅を意識して折りたたまないといけないということで、わりと面倒だ。一応実装したけど、日本語以外で表示幅が1バイト文字と異なる言語については知らない。