LoginSignup
12
13

More than 5 years have passed since last update.

半角カナを全角カナに変換したときに困ったこと

Last updated at Posted at 2013-07-26

ローマ字と記号は半角、ひらがなとカタカナは全角で表示した〜い、みたいな要件を求められた場合、
CFStringTransform ではなんだかうまくいかなかった。OSのバージョンによって誤変換もあるみたいだし。

仕方ないので…

- (NSString *)hoge:(NSString *)str
{
    if([str isEqualToString:@"ガ"]) return @"ガ";
    if([str isEqualToString:@"ギ"]) return @"ギ";
    
}

みたいなのを一文字づつダラダラかいた関数を作成して、とりあえずおっけーと思ってたのですが、上記の関数を利用して実際に帰ってきた文字列は

「ガ」「ギ」…ではなくて「カ"」「キ"」でした。

なんで!?

どうやらUTF-8における濁点の全角カタカナは文字コードが異なる2種類の文字があるそうで。こまった。

どうすればいいか

解決方法:Unicodeの正規化というのが必要(Normalize)

NSStringには下記のメソッドが用意されているようです。
各メソッドについての詳細はリファレンスや後述の参考サイトなどにて確認して下さい。。。

– decomposedStringWithCanonicalMapping
– decomposedStringWithCompatibilityMapping
– precomposedStringWithCanonicalMapping
– precomposedStringWithCompatibilityMapping

というわけで…

NSString* str = @"ガ";
NSLog(@"%@",[[self hoge:str] decomposedStringWithCompatibilityMapping]);

無事に「ガ」が出力されました〜。

とりあえず解決はしたが、そもそも根本的な何かがおかしいのかな?

参考サイト
http://homepage1.nifty.com/nomenclator/unicode/normalization.htm
http://akisute.com/2010/05/utf-8-normalize.html

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13