iPhoneで日本語の入力や表示ができるのは周知の通りですが、それではプログラム(Cocoa/Objective-C)から日本語テキストを表示するにはどうするの?ってのが昨日のマイ・クエストでした。
例えば、アラート・シートのタイトルを英語で設定するには、
[alertSheet setTitle:@"Shinjuku"];
でOKなんだけど、
[alertSheet setTitle:@"新宿"];
はダメ。文字化けちゃいます。
Mac OS Xなら、localizable.stringsファイルを作って、NSLocalizedString()を使うのが一般的(かな?)。iPhoneでも使えるかもしれないけど、もうちょっと簡単な方法はないかなとNSStringクラスを眺めていると、stringWithUTF8String:メソッドを発見。ハイ、正解!これで正しく日本語が表示できるし、別ファイルを作らずに、ソースコードに日本語を埋め込むことができます(保守性が悪くなるとも言う)。
[alertSheet setTitle:[NSString stringWithUTF8String:"\xe6\x96\xb0\xe5\xae\xbf"]];
この方法では、日本語テキストをUTF-8でエンコードしてC文字列として表す必要があります。そこで、UTF-8ならMax 5でしょ!ってことで、お手軽コンバータを作りました。
嗚呼、美しき哉、iPhoneとMaxの連携!(笑)
ただし、なぜか(なぜだ?)、バックスラッシュ(\)が正しく処理できなかったので(もちろん、\\でもダメ)、スラッシュ(/)で代用しています。実際には、テキスト・エディタでスラッシュをバックスラッシュに全置換して使ってください。
パッチはCopy Compressedで入れておきますね。
----------begin_max5_patcher----------
574.3oc0W1jiSCCE.dcxovJRrqzI14mlvE.jXC6XAZDxMwSqYRrihcDYlQy0
fiAha.mF3bPhcBkoxsSJXxLcii7ytwe5qumsyctNdq4sDgG3UfO.bbty0wQE
pOfyPeGuRbaVAVnllGi7Y95O4sPOjjzJUgK337RhP.DD43fzb0PcS+kvwXWw
YRFtjnF4MzZ7FJiCdK95Fvq4xszLv6p4f2GLN+JrLaKks4i0jLolyX+k9K.n
jn9GIopNgK8AWN7SXMkTVAQp3EtKHuQtezdZDzaUz.QcuIcX8Lk2TQzqnmG3
x9Qt20suYwDUUuOvaHlzAx59H.p7ALUKDzgDB5ITHGH2QxE2TtlWXRT91OwI
T8HN54ahyiWiUgqwRdsAikZQgsR6HnRXPTxYmwts.TPXFrThEsDTmJAiTZJD
dbKYt9CcpVZg8M0lZdSkAWsx5kfvjgLpvyRWIppoL4UfKZeQqAeEaeeoSsRB
N6J.oRhoMohruhP5SA8O6TjDzsIkAGEZcGkNXpfkQmtidxq55NuiZPSAVWS5
1v3imIEXkLoBpPZkKW9aM8yu7se70uaPT+GtxotMb9uvoZk5jGa+ucQwZe7G
ZNAuoNa7UM78Hfc7lSDRJCKob1eNGzClzVZdNQM9Hjkz7Jd2IACLbf+FmJRn
IfTvrRTvDHJbVIJbBDEMqDkLAh5t.E.NqNB9HDkLqNZ0TJ17mUjRe9gzdK2Q
1S5DxkhSUm0uZ3h1658OBazDXMdV0W7DKD+aIpqy8t+BGFJf0A
-----------end_max5_patcher-----------
【追記】コメントをいただきました。ソースコードのエンコーディングをUTF-8にして、以下の記述で日本語表示ができます。
[alertSheet setTitle:[NSString stringWithUTF8String:"新宿”]];
よって、Maxでコンバート云々は無用の長物でした。ご指摘ありがとうございます。
ソースコードファイルのエンコーディングをUTF-8にしちゃうと楽ですよ。MAXと連携必要なくなっちゃいますが。
コメントありがとうございます。
> ソースコードファイルのエンコーディングをUTF-8にしちゃうと楽ですよ。
あれ、そうなんですか? UTF-8にしていますが、ソースコード上は文字化けないものの、アラートを表示すると文字化けちゃうんです。toochain 0.3/Firmware 1.1.4での話です。
と思いきや、分かりました。
[alertSheet setTitle:[NSString stringWithUTF8String:”新宿”]];
ですね。確かに!
というわけで、この記事はオトボケになりました(涙)。